[英]UnmanagedMemoryStream disposal and memory leaks
考慮以下代碼片段,並忽略缺少using子句或顯式處理的問題:
public static Image GetImage(string imageName)
{
Image image = null;
Stream unmanagedMemoryStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(imageName);
image = Image.FromStream(unmanagedMemoryStream);
return image;
}
何時在unmanagedMemoryStream上調用Dispose()? 如果將包含方法設置為非靜態,將如何改變? 在這種情況下是否可能泄漏非托管內存?
處置image
,將處置流Image.FromStream
有效地獲取其給定流的所有權。
特別是,如果您確實在此處的using
語句中放置了流,則該圖像將至少在某些圖像類型上不可用。
除了Jon的答案-將方法更改為非靜態方法將無效。 您在靜態方法中具有Image局部變量的事實不會改變任何內容-它只是堆棧上對堆上對象的引用。 該方法退出時,該引用將從堆棧中刪除。 因此,無論該方法是否靜態,在內存泄漏方面都不會改變。
這里的內存泄漏可能是因為從未丟棄過映像且從未收集過垃圾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.