วิธีล้างทรัพยากรที่ไม่มีการจัดการใน C # [ซ้ำ]

Jan 20 2021

ฉันมีคลาสนี้:

    public class A
    {
//Some logic code here
    }

คำถามของฉันคือฉันจะกำจัดหรือทำลายวัตถุใด ๆ ที่สร้างขึ้นจากคลาสนี้หลังจากออกไปนอกขอบเขตได้อย่างไร?

ตัวอย่างเช่น:

  A a = new A();
    //some code here

หลังจากที่//some code hereฉันต้องการให้aวัตถุทำลายหรือกำจัดและปลดปล่อยหน่วยความจำที่จัดสรรของเขา

คำตอบ

1 ispiro Jan 20 2021 at 03:55

ฉันจะเพิกเฉยต่อชื่อเรื่องและมุ่งเน้นไปที่เนื้อหาของคำถามเนื่องจากดูเหมือนว่าจะเห็นได้ชัดจากคำถามว่าปัญหาคืออะไร

คำตอบสั้น ๆ : คุณทำไม่ได้ สิ่งนี้จะได้รับการดูแลโดยอัตโนมัติโดยคนเก็บขยะเมื่อเห็นว่าจำเป็น (คุณไม่จำเป็นต้องเรียกใช้ตัวเก็บขยะซึ่งจะเกิดขึ้นโดยอัตโนมัติ)

จากนั้นตัวเก็บขยะจะมองหาเอนทิตีที่อยู่นอกขอบเขตเช่นaในตัวอย่างของคุณและจะเพิ่มพื้นที่ว่างที่พวกเขาใช้ จากนั้นจะเห็นว่าภายในของahave ยังอยู่นอกขอบเขต (เว้นแต่จะมีการอ้างอิงที่อื่นในโค้ดของคุณ) และจัดการกับมัน

ต้องบอกว่าเมื่อคุณใช้ตัวแปรของคลาสที่นำไปใช้DisposeควรเรียกDisposeอย่างชัดเจนหรือใช้usingบล็อกเพื่อทำสิ่งนั้นให้เสร็จ คุณยังสามารถใช้ Finalizer ซึ่งจะดำเนินการเมื่อaได้รับการกำจัด แต่ดูเหมือนว่านั่นไม่ใช่สิ่งที่คุณถาม