有沒有辦法告訴Windows爲程序提供更多內存?我寧願這樣做,而不是重新編寫一個簡單的程序,否則它運行良好。我們可以爲獲取OutOfMemoryException的程序分配更多內存
我們有一個C#程序,每15分鐘運行一次,並將新傳入文件與前一個文件進行比較。新舊文件都是「|」分離並讀入內存。我們還沒有嘗試優化,只是將所有內容都讀入字典並進行直接比較。
我們收到此錯誤,
Message: Exception of type 'System.OutOfMemoryException' was thrown. at
System.String.SplitInternal(Char[] separator, Int32 count,
StringSplitOptions options)
at System.String.Split(Char[] separator)
每個文件都有約1000線,每條線都有base64編碼的大圖像作爲豎線分隔的領域之一。每行可以是500K-700K,因此每個文件的總大小約爲600MB。也許偶爾會超過1MB。
我們估計該程序使用1.5GB左右的RAM。我想給它更多的RAM而不是試圖優化代碼。或者,如果整個程序運行內存不足,或者某個特定的巨大行可能會導致SplitInternal引發此異常,將會很好。
Windows Server 2012R2。
編輯:有問題的代碼行只是「string [] data = info.Split('|');」在一個循環內。在發現這個異常之後,程序繼續並處理很多其他行。
不反對重寫它,但如果有更簡單的方法,我想先嚐試一下。我們確認它是用「Prefer 32 bit」複選框編譯的,所以首先我們將嘗試取消選中並查看會發生什麼。畢竟,2GB現在在服務器上並不是很多...
你有內存泄漏。添加更多的內存不是解決方案,而是檢查你的應用程序代碼中的哪個部分泄漏了它 – Rahul
你應該真的將代碼更改爲內存中不需要1.5 GB字符串的代碼。除了OOM之外,異常通常意味着與物理內存不同的東西,例如32位進程中的地址或碎片,或者...... – Console
'或者,如果程序整體運行內存不足或一個特定的巨大行可能會導致SplitInternal拋出此異常.'另一個值得了解的好事可能是您正在運行的代碼... – mjwills