6

CF Remote Performance Monitorを使用しましたが、これは管理されていない世界ではなく、管理されている世界で初期化されたメモリのみを追跡するようです。プロファイラーにリストされている数値は、許可されている最大値 (CE 5 では 32 MB) をはるかに下回っているため、これを推測することしかできません。RPM を使用して特定のアプリをプロファイリングすると、すべてのキャッシュの合計使用量が約 12 MB に達し、管理されていない何かがより多くのメモリを要求し始めると (私が推測するに) ゆっくりと縮小することがわかりました。システムのメモリ スライダーも、デバイスのメモリが非常に不足していることを示しています。プロセスを強制終了すると、スライダーはすべてのメモリが戻ってくることを示します。したがって、メモリを飲み込んでいるのは、この管理されたプロセスである必要があります (?)。

対応する P/Invoke 呼び出しと一致させることができる何らかの方法でアンマネージ メモリの使用状況を追跡できる単純な (っぽい?) 方法はありますか?

編集:あなたが再タグ付けするすべての人にとって、それは .NET ではありません。このように質問にタグを付けると混乱します。.NETCF / コンパクト フレームワークです。それらは似ているように見えますが、CF は基本的に NotImplementedException の単なるラッパーであるのに対し、.NET は揺るぎないため、異なります。

4

3 に答える 3

3

Interop loggingを有効にしてみてください。

また、使用しているネイティブ dll のコードにアクセスできる場合は、http: //msdn.microsoft.com/en-us/netframework/bb630228.aspxを確認してください。

于 2008-08-13T20:33:46.253 に答える
1

私は間違いなく、C# マネージ アプリのアンマネージ問題としばらくの間戦ってきました。簡単ではありません。

私が最も役立つと思ったのは、テキスト ログ ファイルに定期的に出力することです。たとえば 、新しいフォームをロードするたびにログを記録するとともに、数分ごとにGlobalMemoryStatusの出力を印刷できます。そこから、少なくとも、メモリが徐々に侵食されているか、1 日の特定の時間にメモリの巨大なチャンクが消失していることがわかります。

私たちの場合、デバイスが使用されている限り、1 日中徐々にメモリが失われることがわかりました。そこから最終的に、フォーム基本クラスで特に理由もなくバーコード スキャン デバイスが初期化されていることがわかりました (前の開発者のせいです! :-)

このロギングの設定はちょっとした手間かもしれませんが、実際のデータ、インストルメンテーション、例外からのスタック トレースなどを取得できるライブ使用中のデバイスでは、長期的には大きなメリットがありました。

于 2008-08-14T16:06:04.087 に答える
1

わかりました、私はCEでC#ではなくC ++を使用しているため、これは役に立たないかもしれませんが...

Windows CE でのメモリとリソースの使用状況、リーク、および例外を監視するEntrk ツールボックスというパッケージを使用しています。boundschecker の軽量 CE バージョンによく似ています。ほとんどの場合、トリックを実行します。

于 2008-09-27T11:35:15.200 に答える