Có bất kỳ ý nghĩa nào để đặt đối tượng tùy chỉnh thành null
(Nothing
trong VB.NET) theo phương thức Dispose()
không? Điều này có thể ngăn chặn rò rỉ bộ nhớ hoặc nó vô dụng ?!Bất kỳ ý nghĩa nào để đặt obj = null (Không có gì) trong Dispose()?
Hãy xem xét hai ví dụ:
public class Foo : IDisposable
{
private Bar bar; // standard custom .NET object
public Foo(Bar bar) {
this.bar = bar;
}
public void Dispose() {
bar = null; // any sense?
}
}
public class Foo : RichTextBox
{
// this could be also: GDI+, TCP socket, SQl Connection, other "heavy" object
private Bitmap backImage;
public Foo(Bitmap backImage) {
this.backImage = backImage;
}
protected override void Dispose(bool disposing) {
if (disposing) {
backImage = null; // any sense?
}
}
}
Trong ví dụ thứ hai của tôi, tôi có Bitmap, được đề xuất Vứt bỏ(). Bây giờ, khi Bitmap không được tạo bởi đối tượng Foo nhưng chỉ được truyền vào tham số, tôi không thể thực hiện nó. Tôi nghĩ đặt nó ít nhất là để Null ... – serhio
Bạn luôn phải quyết định nơi làm sạch phụ thuộc diễn ra. Nếu bạn biết rằng bitmap không được sử dụng ở bất kỳ nơi nào khác, Foo nên gọi 'Dispose()'. Nếu không, nó chỉ nên để nó và để người gọi xử lý việc dọn dẹp. Không có lợi ích bổ sung trong việc đặt tham chiếu cục bộ thành rỗng. Khi thể hiện của Foo được khai hoang, đó là thể hiện của Bitmap trừ khi người gọi vẫn giữ một tham chiếu đến nó. –
@serhio - nếu bạn muốn giải phóng tài nguyên được sử dụng bởi đối tượng Bitmap của bạn ngay sau khi bạn sử dụng nó trong Foo (không ai khác đang sử dụng nó), thì Foo.Dispose nên gọi backImage.Dispose – Gishu