ฉันมีกล่องโต้ตอบ C# WinForm ซึ่งมีการควบคุมตารางแบบกำหนดเองพร้อมแถวและเซลล์ซึ่งเป็นการควบคุมแบบกำหนดเองทั้งหมดเช่นกัน หลังจากปิด (ไม่ซ่อน) กล่องโต้ตอบนี้ฉันมีหน่วยความจำรั่ว (และได้รับการยืนยันโดยผู้สร้างโปรไฟล์หน่วยความจำ .NET)
จากข้อมูลที่ฉันได้รับจากผู้สร้างโปรไฟล์ ฉันคิดว่ามันเกี่ยวข้องกับการกำจัดการควบคุมเหล่านี้ แต่ฉันไม่แน่ใจว่าจะแก้ไขได้อย่างไร
ในการควบคุมตารางฉันมีรายการแถว:
private readonly List<CustomRow> _rows = new List<CustomRow>();
ในแต่ละแถวฉันมีรายการเซลล์:
List<CustomCell> _cells = new List<CustomCell>();
ตอนนี้การกำจัดในการควบคุมเสร็จสิ้นโดยโค้ดที่สร้างขึ้นอัตโนมัติใน designer.cs:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
แต่ตอนนี้ ฉันคิดว่าฉันต้องย้ายโค้ดการกำจัดไปยังไฟล์ .cs และเพิ่มอะไรทำนองนั้นหรือไม่ เช่น สำหรับตาราง:
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
// dispose each row here
}
base.Dispose(disposing);
}
หรือดำเนินการโดยอัตโนมัติและเหตุผลของหน่วยความจำรั่วแตกต่างออกไป (มันจะเป็นอะไรได้?)
Show
และไม่ใช่ShowDialog
เมื่อแสดง - หืม กล่องโต้ตอบเหรอ? และวิธีการDispose
เรียกว่า? - person Ivan Stoev   schedule 26.12.2015