2012-03-21 7 views
3

Amazon S3のアップローダとして動作するSilverlightアプリケーションを作成しました。それはPC上で正常に動作しますが、Macでは膨大なメモリリークがあります。MacでのSilverlight - メモリリークをデバッグするには?

問題:デバッグ方法がわかりません。トップのGoogleの提案である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

AllowWriteStreamBuffering = falseはMountain Lionでクラッシュを引き起こしますが、Snow Leopardではクラッシュすることはありません。 – jayarjo

0

remote debugging on the macを設定しましたか?メモリリークを追跡することはできませんが、少なくともコードをステップ実行して何が起こっているかを確認することができます。

+0

私はそう言いました、私は持っています。しかし、私は例外をスローしない、または私の変数からちょうど見ることができるものをデバッグする方法を理解することはできません。しかし、おそらく私は作ることができるGC呼び出しがありますか?セキュリティのためにSilverlightで疑わしい。 –

+0

コードの関連部分を掲載することはできますか? – Bryant

0

は、私はそのようなWindowsのバージョンに対するSciTek .NETメモリプロファイラと、プロファイラを実行してみて、あなたが適切にあなたのすべてのオブジェクトを配置し、実際にそこに漏れていないことを確認したいです。うまくいけば、これはMacに適切に変換されます。