我現在被這個問題阻塞了整整一天,閱讀了成千上萬的谷歌搜索結果,但似乎沒有反映我的問題,甚至接近它...我希望任何你對我有一個正確的方向。我寫了一個客戶端 - 服務器應用程序(所以更像2個應用程序) - 客戶端收集有關他的系統的數據以及屏幕截圖,將所有這些數據序列化爲一個XML流(圖片爲byte [] - 數組]]並將其定期發送到服務器。 服務器接收流(通過tcp),將xml反序列化爲一個信息對象並在Windows窗體上顯示信息。 此過程以3秒的提交間隔穩定運行約20-25分鐘。當觀察內存使用情況時,沒有什麼重要的東西可以看到,也有點穩定。但是在這20-25分鐘後,服務器在反序列化tcp-stream的位置拋出StackOverflowException異常,尤其是在設置byte [] - 數組的Image屬性時。StackOverFlowException - 但很明顯沒有遞歸/無限循環
我徹底搜查了遞歸或無限循環,以及關於它歷經千sucessfull間隔的,我很難想象發生的事實。
public byte[] ImageBase
{
get
{
MemoryStream ms = new MemoryStream();
_screen.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
return ms.GetBuffer();
}
set
{
if (_screen != null) _screen.Dispose(); //preventing well-known image memory leak
MemoryStream ms = new MemoryStream(value);
try
{
_screen = Image.FromStream(ms); //<< EXCEPTION THROWING HERE
}
catch (StackOverflowException ex) //thx to new CLR management this wont work anymore -.-
{
Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
}
ms.Dispose();
ms = null;
}
}
我希望有更多的代碼是不必要的,或者它可能變得非常複雜...
請幫幫忙,我不知道在所有的再
THX 克里斯
我不知道你在_screen = Image.FromStream(ms)中做了什麼,也許你是在不經意間設置ImageBase? – Trap 2011-01-08 03:15:59
我喜歡SO的SO問題。 – Mehrdad 2011-01-08 03:18:51
你真的應該把每個MemoryStream的用法放到一個using()塊中,這樣可以更容易地看到正確的處理方式! – 2011-01-08 03:35:22