No. Trong thực tế, bạn không thực sự muốn nó được thu gom rác - khiến bộ thu gom rác rất thường xuyên sẽ giảm hiệu suất.
gì bạn làm muốn là để xử lý các nguồn lực không được quản lý một cách kịp thời - và đó là nơi IDisposable
đến, cùng với using
tuyên bố:
void MyFunction()
{
using (Bitmap image = RetrieveImage())
{
DoSomething(image);
}
}
Đó sẽ gọi image.Dispose()
vì nó rời using
tuyên bố, có hoặc không DoSomething
đã ném một ngoại lệ.
Bạn phải sử dụng biến thêm mặc dù - trừ khi bạn thay đổi DoSomething
để có một Func<Bitmap>
thay vào đó, nên thay vì:
void DoSomething(Bitmap image)
{
// Code here
}
...
DoSomething(RetrieveImage());
bạn phải:
void DoSomething(Func<Bitmap> imageProvider)
{
using (Bitmap image = imageProvider())
{
// Code here
}
}
...
DoSomething(() => RetrieveImage());
Lưu ý rằng không cho cơ hội để vượt qua một bitmap mà không cần nó đang được xử lý - có thể là vấn đề nếu bạn muốn sử dụng lại sau. Tuy nhiên, đó là một kỹ thuật tốt đẹp để ít nhất là biết về.
EDIT: Như mbeckish đã chỉ ra trong ý kiến của mình, không có nhiều lợi ích ở đây chỉ là xử lý các bitmap trong vòng RetrieveImage
. Dưới đây là một biến thể trên mô hình mặc dù:
public void ApplyToEachLineInFile(string file, Action<string> action)
{
using (TextReader reader = File.OpenText(file))
{
string line;
while ((line = reader.ReadLine()) != null)
{
action(line);
}
}
}
Ở đây, "tiếp thu và xử lý" logic được đóng gói mà không gọi lo lắng về nó - nhưng người gọi vẫn có thể rất linh hoạt về sự phức tạp của logic họ vượt qua in.
Nguồn
2010-01-27 21:07:11
Tôi không thấy bất kỳ sự khác biệt giữa 1 und 2. Tại sao nó nên cư xử sưu tập khôn ngoan rác khác nhau? – flq
Tôi không thực sự là người ủng hộ ý kiến kiểu "bạn sẽ muốn điều này", nhưng nghiêm túc, bộ thu gom rác .NET thực sự biết rõ hơn lập trình viên khi đó là thời điểm tốt để dọn dẹp. hãy nhớ rằng .NET VM không phải là một hệ thống thời gian thực. Ngoài ra, nếu bạn có tài nguyên không được quản lý, hãy sử dụng IDisposable và sử dụng. –
Bạn nên tin tưởng bộ thu gom rác tiêu chuẩn - rất có khả năng bạn sẽ mất hiệu suất nếu bạn buộc phải thu gom rác thải. Có lý do cụ thể nào mà bạn quan tâm khi nó xảy ra không? – jball