ในบทความนี้ เราจะทำความเข้าใจความแตกต่างระหว่างเมธอด Dispose() และ Finalize() ใน C# ซึ่งทั้งคู่ใช้สำหรับการจัดการทรัพยากรที่ไม่ได้รับการจัดการโดย Garbage Collector (Unmanaged Resources) แต่มีวิธีการทำงานและจุดประสงค์ที่ต่างกัน
Dispose()
- เมธอดนี้ถูกกำหนดในอินเทอร์เฟซ
IDisposable - ต้องถูกเรียกใช้งานโดยผู้พัฒนา (Developer) โดยตรง หรือผ่านคำสั่ง
using - เมื่อถูกเรียกใช้ จะช่วยปล่อยทรัพยากร Unmanaged Resources ทันที
- มักถูกนำไปใช้เมื่อมีเมธอด
Close()อยู่แล้ว - ถูกประกาศเป็น
publicmethod - ทำงานรวดเร็ว และปล่อยออบเจกต์ทันที
- เนื่องจากทำงานแบบ即时 (Instantaneous) จึงไม่ส่งผลกระทบต่อประสิทธิภาพ
Finalize()
- เป็นเมธอดที่ถูกกำหนดในคลาส
Object(ไม่ใช่ java.lang.Object นะครับ) - ถูกเรียกใช้โดย Garbage Collector (GC) อัตโนมัติ
- ช่วยปล่อยทรัพยากร Unmanaged Resources ก่อนที่ออบเจกต์จะถูกทำลาย
- ถูกนำไปใช้เพื่อจัดการทรัพยากรที่ไม่ได้รับการจัดการ
- ถูกประกาศเป็น
protected(ใน C# จะเขียนในรูป Destructor~ClassName()) - ทำงานช้ากว่า
Dispose()เนื่องจากต้องรอรอบ GC - อาจส่งผลต่อประสิทธิภาพของแอปพลิเคชันหากใช้งานไม่ถูกต้อง
สรุป
ควรใช้ Dispose() สำหรับการปล่อยทรัพยากรทันทีที่เสร็จสิ้นการใช้งาน (Deterministic Cleanup) ส่วน Finalize() เป็นการรับประกันสำรอง (Safety Net) หากลืมเรียก Dispose() แต่อาจมีผลกระทบต่อประสิทธิภาพ