แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | กำจัด () | จบการทำงาน () |
---|---|---|
ที่กำหนดไว้ | เมธอดการกำจัด () ถูกกำหนดในอินเตอร์เฟส IDisposable ของอินเตอร์เฟส | เมธอด finalize () id ที่กำหนดในคลาส java.lang.object |
วากยสัมพันธ์ | โมฆะสาธารณะกำจัด () { // ทิ้งรหัสที่นี่ } | โมฆะที่ได้รับการป้องกันจะเสร็จสิ้น () { // รหัสสรุปที่นี่ } |
เรียก | วิธีการกำจัด () ถูกเรียกโดยผู้ใช้ | เมธอด finalize () ถูกเรียกใช้โดยตัวรวบรวมขยะ |
วัตถุประสงค์ | วิธีการกำจัด () จะใช้เพื่อฟรีทรัพยากรที่ไม่มีการจัดการเมื่อใดก็ตามที่มันถูกเรียก | วิธีการสิ้นสุด () จะใช้เพื่อเพิ่มทรัพยากรที่ไม่มีการจัดการก่อนที่วัตถุจะถูกทำลาย |
การดำเนินงาน | วิธีการกำจัด () จะต้องดำเนินการเมื่อใดก็ตามที่มีวิธีการปิด () | วิธีการสิ้นสุด () จะต้องดำเนินการสำหรับทรัพยากรที่ไม่มีการจัดการ |
ตัวระบุการเข้าถึง | วิธีการกำจัด () ถูกประกาศให้เป็นสาธารณะ | วิธีการสิ้นสุด () จะประกาศเป็นส่วนตัว |
การกระทำ | วิธีการกำจัด () เร็วขึ้นและกำจัดวัตถุออกทันที | วิธีการสิ้นสุดจะช้ากว่าเมื่อเทียบกับการกำจัด |
ประสิทธิภาพ | วิธีการดำเนินการ () ดำเนินการทันทีโดยไม่ส่งผลกระทบต่อประสิทธิภาพของเว็บไซต์ | วิธีการสิ้นสุด () ช้าลงส่งผลกระทบต่อประสิทธิภาพของเว็บไซต์ |
คำจำกัดความของการกำจัด ()
วิธีการ dispose () ปล่อยทรัพยากรที่ไม่มีการจัดการที่จัดขึ้นโดยวัตถุของชั้นเรียน ทรัพยากรที่ไม่ได้รับการจัดการคือไฟล์การเชื่อมต่อข้อมูลเป็นต้นวิธีการกำจัด () ถูกประกาศใน IDisposeable อินเตอร์เฟสและนำไปใช้งานโดยคลาสโดยการใช้อินเตอร์เฟส IDisposable วิธีนี้ไม่ได้ถูกเรียกโดยอัตโนมัติ โปรแกรมเมอร์จะต้องดำเนินการด้วยตนเองเมื่อคุณสร้างคลาสที่กำหนดเองที่ผู้อื่นจะใช้ วิธีการมีไวยากรณ์ต่อไปนี้:
โมฆะสาธารณะกำจัด () {// ทิ้งรหัสที่นี่}
ในไวยากรณ์ข้างต้นคุณสามารถสังเกตเห็นว่าวิธีการที่มีการประกาศเป็นสาธารณะ มันเป็นเพราะวิธีนี้มีการกำหนดไว้ในส่วนต่อประสาน IDisposable และมันจะต้องมีการดำเนินการโดยชั้นเรียนที่ใช้อินเตอร์เฟซนี้ ดังนั้นเพื่อให้สามารถเข้าถึงคลาสที่ใช้งานได้วิธีดังกล่าวจะประกาศเป็นสาธารณะ
วิธีการนี้ถูกเรียกใช้โดยรหัสของโปรแกรมด้วยตนเองเนื่องจากมีการใช้งานเพื่อเรียกใช้ ประสิทธิภาพของเมธอดนั้นรวดเร็วและมันช่วยปลดปล่อยทรัพยากรที่จัดเก็บโดยวัตถุของคลาสทันที
ความหมายของการจบ ()
กระบวนการ finalize () ถูกกำหนดไว้ในคลาส อ็อบเจ็กต์ ใช้สำหรับกิจกรรมการล้างข้อมูล เมธอดนี้ถูกเรียกใช้โดยตัวรวบรวมขยะเมื่อไม่ได้ใช้การอ้างอิงของวัตถุเป็นเวลานาน ตัวรวบรวมขยะจะทำให้ทรัพยากรที่มีการจัดการเป็นอิสระโดยอัตโนมัติ แต่ถ้าคุณต้องการปลดปล่อยทรัพยากรที่ไม่มีการจัดการเช่นการจัดการไฟล์การเชื่อมต่อข้อมูล ฯลฯ วิธีการสุดท้ายจะต้องดำเนินการด้วยตนเอง ตัวรวบรวมขยะเรียกใช้วิธีการสิ้นสุด () ก่อนที่มันจะทำลายวัตถุอย่างสมบูรณ์
ไวยากรณ์ของวิธีการจบ ():
โมฆะป้องกันการทำให้จบ () {// รหัสการสรุปที่นี่}
ในไวยากรณ์ข้างต้นวิธีการสิ้นสุด () ได้รับการประกาศว่าได้รับการคุ้มครอง เหตุผลที่อยู่เบื้องหลังคือวิธีการสิ้นสุด () จะต้องไม่สามารถเข้าถึงได้จากนอกชั้นเรียนและจะต้องเข้าถึงได้โดยตัวรวบรวมขยะเท่านั้น
เมธอด finalize () มีผลต่อต้นทุนของการทำงานเนื่องจากไม่ได้เพิ่มหน่วยความจำทันที ใน C # นั้นวิธีการสุดท้ายจะถูกเรียกโดยอัตโนมัติเมื่อมี destructors
ความแตกต่างที่สำคัญระหว่างการกำจัด () และการสรุป ()
- วิธีการกำจัด () ถูกกำหนดไว้ในส่วนต่อประสาน IDisposable ในทางกลับกันวิธีการสรุป () ถูกกำหนดไว้ใน วัตถุ ชั้นเรียน
- วิธีการกำจัด () จะต้องมีการเรียกใช้ด้วยตนเองภายในรหัสโดยโปรแกรมเมอร์ในขณะที่วิธีการสรุปจะถูกเรียกโดยอัตโนมัติโดยตัวเก็บรวบรวมขยะก่อนที่มันจะทำลายวัตถุ
- วิธีการกำจัดสามารถเรียกใช้ได้ตลอดเวลาในขณะที่วิธีการจบการทำงานถูกเรียกใช้โดยตัวรวบรวมขยะเมื่อพบว่าวัตถุนั้นไม่ได้ถูกอ้างอิงเป็นเวลานาน
- วิธีการกำจัด () ถูกนำมาใช้ในชั้นเรียนหลังจากการใช้อินเตอร์เฟซ IDisposable วิธีการสิ้นสุด () จะต้องดำเนินการเฉพาะสำหรับ ทรัพยากรที่ไม่มีการจัดการ เพราะ ทรัพยากร ที่มีการจัดการจะถูกปลดปล่อยโดยอัตโนมัติโดยตัวเก็บรวบรวมขยะ
- ตัวระบุการเข้าถึงของวิธีการกำจัด () เป็นแบบสาธารณะตามที่กำหนดไว้ในส่วนต่อประสาน IDisposable และมันจะถูกนำมาใช้โดยคลาสที่ใช้อินเทอร์เฟซนี้ดังนั้นมันควรเป็นแบบสาธารณะ ในทางกลับกันวิธีการสิ้นสุด () ได้ป้องกันตัวระบุการเข้าถึงเพื่อให้สมาชิกไม่สามารถเข้าถึงได้นอกชั้นเรียน
- วิธีการกำจัด () เป็นไปอย่างรวดเร็วและทำให้วัตถุเป็นอิสระในทันทีดังนั้นจึงไม่มีผลต่อต้นทุนการปฏิบัติงาน วิธีการสิ้นสุด () จะช้ากว่าและไม่ทำให้ทรัพยากรที่วัตถุถืออยู่นั้นว่างทันที
สรุป:
ขอแนะนำให้ใช้วิธีการกำจัด () เหนือวิธีการสิ้นสุด () เนื่องจากเร็วกว่าการสรุป นอกจากนี้ยังสามารถเรียกได้ตลอดเวลาเมื่อต้องการ