[英]How i can free my application memory in c#?
1) 如何釋放內存或增加最大已用內存?
您是否收到 OutOfMemoryException 並且您的內存沒有填滿您的機器? 這可能是由於 x86 編譯造成的,您應該將其更改為 x64。
2)有沒有其他方法可以將我所有的圖片都放入圖片框而不填充我的記憶?
是和否。 如果您使用位圖,它將在內存中分配圖像。 如果您稍后將所有圖像一起重新創建圖像而不壓縮它,那么如果您沒有正確處理位圖,您也可能會丟失一些內存。 您可以加載它們,壓縮它們,然后處理原始的,將壓縮/優化的保存在內存中。
此外,請記住在使用后始終處理您的位圖。 GC 通常會處理它們,但您應該始終處理它們:
using (Bitmap bitmap = new Bitmap("file.jpg")
{
// bitmap handling here
}
當然,如果您在圖片框中顯示它,則無法處理它,但同樣,您的問題並不完全清楚。
沒有您的代碼,我無法為您提供更好的答案,如果您更新問題,我很樂意編輯此答案。
讀:
更新
修復您的線程后,我注意到您提供了一個圖像,但格式已損壞。
閱讀我的回答,它應該對您有所幫助(特別是壓縮部分)。 您也可以更改為 x64。
更新 2 - 壓縮代碼示例
public void ExampleMethod()
{
pictureBox1.Image = GetCompressedFile("file.jpg", quality: 10);
}
private Image GetCompressedFile(string fileName, long quality)
{
using (Bitmap bitmap = new Bitmap(fileName))
{
return GetCompressedBitmap(bitmap, quality);
}
}
private Image GetCompressedBitmap(Bitmap bmp, long quality)
{
using (var mss = new MemoryStream())
{
EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
ImageCodecInfo imageCodec = ImageCodecInfo.GetImageEncoders().FirstOrDefault(o => o.FormatID == ImageFormat.Jpeg.Guid);
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = qualityParam;
bmp.Save(mss, imageCodec, parameters);
return Image.FromStream(mss);
}
}
在質量參數中設置質量。 100 表示 100%,50 表示 50%。
嘗試將質量設置為 10,看看它是否有效。
從代碼中刪除所有 Bitmap bmp = new Bitmap,並與您的PictureBoxInstance.Image = GetCompressedFile(...);
一起顯示PictureBoxInstance.Image = GetCompressedFile(...);
檢查ExampleMethod()
。
代碼基於: https : //stackoverflow.com/a/48274706/4352946
不過,您必須記住,即使使用 Dispose,也不會立即釋放內存,您應該等待 GC。
PS:在旅途中壓縮文件你可能最終會在內存中得到兩個圖像(壓縮的和未壓縮的)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.