2012-03-21 12 views
3

我已經編寫了一個Silverlight應用程序,它可以作爲亞馬遜S3的上傳器。它可以在PC上正常工作,但在Mac上它有一個巨大的內存泄漏。Mac上的Silverlight - 如何調試內存泄漏?

問題:我不知道如何調試它。 WinDbg,谷歌最重要的建議,顯然沒有了。我不認爲我可以從VS內部獲得線索(通過遠程調試進行連接時)。我沒有檢查,但我不認爲Mac OS調試器將會有用。

具體行爲是當文件上傳時,它停留在內存中。由於文件大小可能爲幾GB,因此可能會耗盡所有內存並導致Silverlight崩潰。我想這可能是Silverlight中的一個錯誤,但是如果我知道確切的問題,也許我可以找到解決方法。在Windows上,還有一個確認錯誤https://connect.microsoft.com/VisualStudio/feedback/details/674960/writing-to-ms-internal-internalwebrequeststream-deadlocks-when-host-closes-request-stream#details,沒有人想修復。

這就是我使用一種被製造商拒絕的技術,我想。

回答

2

原來,HttpWebRequest.AllowWriteStreamBuffering = false錯誤(或我的Windows解決方法)導致了可怕的內存泄漏(和其他死鎖)在Mac上。所以我被迫啓用緩衝。現在一切正常,成本花費進步和上傳速度報告。

太糟糕了,我沒有學習一種歸納法的方法。必須或多或少地發現它。

+0

在Snow Leopard中,AllowWriteStreamBuffering = false會導致Mountain Lion崩潰,而它絕對不會導致崩潰。 – jayarjo 2012-12-20 13:47:55

0

您是否嘗試過設置remote debugging on the mac?它可能無法追蹤內存泄漏,但至少可以逐步查看代碼以查看發生了什麼。

+0

我應該提到的是,我有。但我無法弄清楚如何調試那些不會拋出異常的東西,或者只能從我的變量中觀察到。但也許有我能做的GC呼叫?由於安全原因,Silverlight中存在疑問。 – 2012-03-21 21:03:41

+0

你可以發佈代碼的相關部分嗎? – Bryant 2012-03-22 00:22:06

0

我想嘗試運行一個分析器如Windows版本的SciTek .NET內存分析器,並確認你正在處理所有的對象,而不是真的在那裏泄漏。希望這將適當地轉化爲Mac。 (大多數程序員在正確處理它們的對象時非常糟糕,是的,它確實很重要。)