2014-02-10 86 views
0

我用這個代碼,以截屏每秒鐘有計時器,但它似乎是填補了我的內存(約30 MB每次取)...這是代碼:C#CopyFromScreen填補了內存

Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); 
Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot); 
gfxScreenshot.CopyFromScreen(136, 93, 9, 0, new Size(1088-391, 1039-65), CopyPixelOperation.SourceCopy); 

return bmpScreenshot; 

有沒有辦法清除內存?

+0

你需要'Dispose()'東西。 – SLaks

回答

1

您需要通過調用Dispose或與using()聲明,稱它給你包裝,例如妥善處置的事情:

Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); 

using(Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot)) { 
    gfxScreenshot.CopyFromScreen(136, 93, 9, 0, new Size(1088-391, 1039-65), CopyPixelOperation.SourceCopy); 
} 

return bmpScreenshot; 

你也應該處置返回Bitmap實例一旦你完成用它。

+0

似乎沒有工作... – user1176999

+0

@ user1176999可以詳細說明嗎?你會得到什麼錯誤? – Lloyd

0

BitmapGraphics實現IDisposable接口。要釋放非託管資源,您應該調用Dispose方法或用using語句包裝這兩個對象。

+0

@ codemann8,wtf? https://msdn.microsoft.com/en-us/library/system.drawing.bitmap(v=vs.110).aspx –

+0

對不起,它似乎按照文檔,但是,當我添加一個using()圍繞一個位圖,它拋出一個錯誤,說它沒有實現IDisposable,所以現在我很困惑...我刪除了我以前的評論 – codemann8