ผู้สัมภาษณ์ถามฉันเกี่ยวกับสิ่งนี้ในวันนี้ ... มีคำตอบไหม?
ผู้สัมภาษณ์ถามฉันเกี่ยวกับสิ่งนี้ในวันนี้ ... มีคำตอบไหม?
คำตอบ:
System.GC.Collect()บังคับให้ตัวเก็บขยะทำงาน ไม่แนะนำให้ใช้ แต่สามารถใช้ได้หากเกิดสถานการณ์
ไม่แนะนำให้โทร gc อย่างชัดเจน แต่ถ้าคุณโทร
GC.Collect();
GC.WaitForPendingFinalizers();
มันจะเรียก GC อย่างชัดเจนตลอดรหัสของคุณไม่ลืมที่จะเรียกหลังจากGC.WaitForPendingFinalizers();GC.Collect()
WaitForPendingFinalizersไม่จำเป็นต้องให้ "ประสิทธิภาพที่ดีขึ้น": มันเพียงแค่บล็อกจนกว่าวัตถุทั้งหมดในคิวการสรุปจะได้รับการสรุป (วัตถุที่อาจจะมีการเรียกก่อนหน้านี้ไปที่Collectนั่น) หากคุณต้องการโอกาสสำหรับผู้ที่วัตถุที่จะเก็บแล้วคุณต้องอื่นโทรไปCollect หลังจากที่WaitForPendingFinalizersโทร
WaitForPendingFinalizers?
GC.Collect()
จากMDSN ,
ใช้วิธีนี้เพื่อพยายามเรียกคืนหน่วยความจำทั้งหมดที่ไม่สามารถเข้าถึงได้
วัตถุทั้งหมดไม่ว่าจะอยู่ในหน่วยความจำนานเท่าใดก็ตามจะถูกพิจารณาเพื่อรวบรวม อย่างไรก็ตามวัตถุที่อ้างอิงในรหัสที่ได้รับการจัดการจะไม่ถูกรวบรวม ใช้วิธีนี้เพื่อบังคับให้ระบบพยายามเรียกคืนจำนวนหน่วยความจำที่มีอยู่สูงสุด
อย่างไรก็ตามโปรดจำไว้ว่าตัวรวบรวมขยะอาจไม่ล้างสิ่งที่คุณคาดหวังเสมอ ...
คุณไม่ต้องการบังคับให้ตัวรวบรวมขยะทำงาน
อย่างไรก็ตามถ้าคุณเคยทำ (เป็นแบบฝึกหัดทางวิชาการอย่างแท้จริง):
GC.Collect()
ฉันคิดว่า. Net Framework ทำสิ่งนี้โดยอัตโนมัติ แต่ในกรณี ขั้นแรกตรวจสอบให้แน่ใจว่าได้เลือกสิ่งที่คุณต้องการลบแล้วเรียกตัวเก็บรวบรวมขยะ:
randomClass object1 = new randomClass
...
...
// Give a null value to the code you want to delete
object1 = null;
// Then call the garbage collector to erase what you gave the null value
GC.Collect();
ฉันคิดว่ามัน .. หวังว่าฉันจะช่วยใครบางคน