Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

ความแตกต่างระหว่าง Dispose() และ Finalize() ใน C#

ในบทความนี้ เราจะทำความเข้าใจความแตกต่างระหว่างเมธอด Dispose() และ Finalize() ใน C# ซึ่งทั้งคู่ใช้สำหรับการจัดการทรัพยากรที่ไม่ได้รับการจัดการโดย Garbage Collector (Unmanaged Resources) แต่มีวิธีการทำงานและจุดประสงค์ที่ต่างกัน

Dispose()

  • เมธอดนี้ถูกกำหนดในอินเทอร์เฟซ IDisposable
  • ต้องถูกเรียกใช้งานโดยผู้พัฒนา (Developer) โดยตรง หรือผ่านคำสั่ง using
  • เมื่อถูกเรียกใช้ จะช่วยปล่อยทรัพยากร Unmanaged Resources ทันที
  • มักถูกนำไปใช้เมื่อมีเมธอด Close() อยู่แล้ว
  • ถูกประกาศเป็น public method
  • ทำงานรวดเร็ว และปล่อยออบเจกต์ทันที
  • เนื่องจากทำงานแบบ即时 (Instantaneous) จึงไม่ส่งผลกระทบต่อประสิทธิภาพ

Finalize()

  • เป็นเมธอดที่ถูกกำหนดในคลาส Object (ไม่ใช่ java.lang.Object นะครับ)
  • ถูกเรียกใช้โดย Garbage Collector (GC) อัตโนมัติ
  • ช่วยปล่อยทรัพยากร Unmanaged Resources ก่อนที่ออบเจกต์จะถูกทำลาย
  • ถูกนำไปใช้เพื่อจัดการทรัพยากรที่ไม่ได้รับการจัดการ
  • ถูกประกาศเป็น protected (ใน C# จะเขียนในรูป Destructor ~ClassName())
  • ทำงานช้ากว่า Dispose() เนื่องจากต้องรอรอบ GC
  • อาจส่งผลต่อประสิทธิภาพของแอปพลิเคชันหากใช้งานไม่ถูกต้อง

สรุป

ควรใช้ Dispose() สำหรับการปล่อยทรัพยากรทันทีที่เสร็จสิ้นการใช้งาน (Deterministic Cleanup) ส่วน Finalize() เป็นการรับประกันสำรอง (Safety Net) หากลืมเรียก Dispose() แต่อาจมีผลกระทบต่อประสิทธิภาพ