วันศุกร์ที่ 20 กุมภาพันธ์ พ.ศ. 2558

IDisposable

IDisposable คือ Interface จาก Method Dispose() ซึ่งทำหน้าที่เรียกคืนทรัพยากร ที่ใช้งานอยู่ (การทำลายตัวแปรที่ใช้อยู่ทิ้ง) แต่ถ้าเราไม่ใช้ Dispose() ใน .Net Framework ก็มี กระบวนการ Garbage ที่จะทำงานให้เราโดยอัตโนมัติอยู่แล้ว หากไม่ได้ใช้งาน Object Variable นานจน Timeout ซึ่งมันจะทำงานเมื่อไหร่นั้นไม่สามารถจะรู้ได้ ทำให้เราสูญเสียทรัพยากรไปในช่วงที่มันยังไม่ถูกทำลาย แต่ถ้าเราใช้ Dispose() เลยหลังจากที่เราไม่ได้ใช้งาน แล้ว เราก็จะได้ทรัพยากรนั้นคืนกลับมาทันที

การใช้งาน IDisposable

  • เราสามารถใช้งานตรงๆ ได้โดยการ Implements (Inheritance Hierarchy) ไป Class ที่เราใช้งาน

using System;

class BaseClass : IDisposable
{
   public void Dispose()
   { 
      Dispose(true);        
   }


  • การใช้บล็อก using() {....} เมื่อให้ Dispose() ทำงานเองเมื่อจบการทำงาน

 using (StreamReader sr = new StreamReader(filename)) {
         txt = sr.ReadToEnd();
      }

// เมื่อสิ้นสุดตัวแปร sr จะถูกทำลาย


  • การใช้บล๊อก try/catch/finally

StreamReader sr = null;
      try {
         sr = new StreamReader(filename);
         txt = sr.ReadToEnd();
      }
      finally {
         if (sr != null) sr.Dispose();     
      }

Credit: IDisposable Interface