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