[英]Out of Memory issue on a 128 GB Ram x64 cpu
我正在開發一個程序,它將312 MB的加密文件讀入內存流,對其解密並復制到目標流中。 我的程序可以很好地運行,文件大小約為120 MB。 我不知道為什么它失敗了?
我的系統信息:64位cpu,RAM:128 GB也是我使用Configuration Manager中的任何CPU設置構建的c#代碼。
我編寫了一個示例程序來檢查內存不足的地方,我發現它在512 MB時失敗。 我確實知道隨着RAM碎片化,內存流需要內存中的連續塊。 但是這里的RAM很大,我也嘗試在多台機器上使用14 GB,64GB和8GB的RAM。
任何幫助表示贊賞。
我編寫的用於測試內存不足大小的示例程序:
const int bufferSize = 4096;
byte[] buffer = new byte[bufferSize];
int fileSize = 1000 * 1024 * 1024;
int total = 0;
try
{
using (MemoryStream memory = new MemoryStream())
{
while (total < fileSize)
{
memory.Write(buffer, 0, bufferSize);
total += bufferSize;
}
}
Console.WriteLine("No errors");
}
catch (OutOfMemoryException)
{
Console.WriteLine("OutOfMemory around size : " + (total / (1024m * 1024.0m)) + "MB");
}
我猜只是快用完大對象堆了。 但是,解決問題的另一種方法是不將流讀取到內存中-大多數解密算法只需要System.IO.Stream-將其讀取到內存中似乎是相對沒有意義的步驟-只需將解密api傳遞給傳入文件或網絡流即可。
嘗試從項目的屬性中禁用“首選32位”選項,在“構建”選項卡中,這對我有用。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.