簡體   English   中英

UnmanagedMemoryStream處理和內存泄漏

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM