我實現一個系統,可以讀取XML文件,加密和壓縮它們,然後發送到Web服務作爲流 我測試的XML文件大小從1KB到26MB不等。 當我將代碼作爲單線程運行時,它看起來運行良好。 但是,當我的代碼更新爲多線程時,它在處理大文件時會在代碼的不同部分拋出內存異常。C#,同時將字符串轉換爲byte []和byte []字符串我離開了內存異常
下面是代碼塊,我的代碼拋出異常:
1.
RijndaelManaged sessionKey = new RijndaelManaged();
sessionKey.KeySize = 256;
EncryptedXml eXml = new EncryptedXml();
byte[] encryptedElement = eXml.EncryptData(xmlDoc.DocumentElement, sessionKey, false);
2.
EncryptedXml.ReplaceElement(xmlDoc.DocumentElement, edElement, false);
3.
private static string CompressStream(string data)
{
byte[] byteData = System.Text.ASCIIEncoding.ASCII.GetBytes(data);
byte[] compressedData = QuickCompression.Compress(byteData, CompressionMethod.Deflated, CompressionLevel.Highest);
return Convert.ToBase64String(compressedData);
}
在第三部分,代碼可以拋出excep任何和灰線,但尤其是在第三行拋出這是
Convert.ToBase64String(compressedData);
同時,我通過任務管理器同時運行的代碼檢查我的記憶中,似乎有很多的可用內存來使用!
我的假設是,即使在總的可用內存,沒有可用的內存足以容納字節數組大小的統一塊。
您對此有何看法?
如果我的假設是正確的,那麼
有沒有辦法迫使內存合併可用內存塊,以獲得較大的可用塊? 或 有什麼辦法,迫使我的代碼要等到足夠的可用內存,以適應字節數組大小統一塊?
如果我的假設是錯誤的,那麼 可以採取什麼問題嗎?
感謝
編輯
有一個名爲MemoryFailPoint類,它可以幫助我解決我的問題呢?
如果您的代碼在進行多線程時失敗,嗯......這可能意味着您有多線程問題,而不是內存問題。檢查你的代碼的同步問題(包括像這個QuickCompression事件的3D派對),嘗試添加鎖等。 –
嘗試分析你的內存使用情況(儘管不使用任務管理器)。這將有助於您確定內存是否是問題而不是猜測。正如Simon建議的那樣,您可能會遇到多線程問題。 – publicgk
你的多線程代碼調用'CompressStream()'?如果是這樣,那麼通過使該方法是單線程的(例如,通過用'lock'保護它)你可能能夠解決這個問題。 –