2017-02-14 8 views
-2

我々はかなり複雑なDelphiアプリケーションを持っています。これは.NETアセンブリを利用しています。 メモリマネージャとしてFastMMを使用しています。DelphiのWindowsデスクトップアプリケーション - 起動時に513 MBのメモリ使用量 - >アイドル状態の50分後に> 32.1 MB

私たちはEOutOfMemory例外を実行しています。だから今私はこれをしばらく調べています。私たちは、Delphiオブジェクト間に循環参照があることを疑っていました。または.NETオブジェクトがDelphiオブジェクトへの参照を保持していて、解放されないことがあります。

これまで私は私たちが最後に変更できるものは見つけられていませんでした。明らかにどこかに問題があるので、本当にイライラしています。

しかし、今日は純粋なチャンスで何かを発見しました。 私たちのアプリケーションが起動すると、タスクマネージャはca.を報告します。 513 MBのメモリが使用されています。 私はちょうどそれを開始したが、昼食のために出発しなければならなかった。 私が戻ってきたとき、私は偶然、そのアプリケーションが現在75 MBしか使用していないことに気付きました。 奇妙なことに、私はクラッシュしたか、または私が何か想定したものであると思った。 いいえ、まったく、アプリは完璧に機能していました。 私は何をしたのですか?>何もありません。ただそれがアイドルになるようにしてください。 私たちのアプリケーションは、Windowsデスクトップアプリケーションです。そのアイドル状態ではあまり進んでいません。

だから私はこれをさらに詳しく調べ始めました。 再現性があります。メモリ消費量は、時間の経過とともに大きなジャンプで減少し始めます。 ca. 50分、32.1 MBに達しました!

.NETガベージコレクタのパフォーマンスカウンタを監視しており、大きな変更はありません。したがって、問題はDelphi側にあると思われます。>これはFastMMを指しています。

私はFastMMの専門家ではありません。私は確信し、FullDebugModeは有効になっていません。 他に誰かがこれを経験しましたか? FastMM内で何が誤って構成される可能性がありますか?

ありがとうございます。

+0

@DavidHeffernan Delphi-Memory Managerに関する多くの経験があるようです。 :-)似たような経験があればコメントすることができれば非常に感謝します。どうも! – santiagoIT

+4

ここで特定のユーザーに質問をすることはできません。最初にコメントしたり、回答にコメントしたりしない限り、@記号を使用してpingを実行することはできません。これはソーシャルメディアサイトではなく、あなたが希望するユーザーから個人的な技術サポートを受けることはありません。 –

+0

@KenWhite情報をありがとう!知っておいてよかった。まあうまくいけば、彼はこの質問にぶつかるでしょう。私はDavidが自分のMemoryManagerを使い、いくつか試してみたことを他のSOの質問から知っています。したがって、彼の意見は非常に価値があるでしょう。 – santiagoIT

答えて

1
  1. OSは、時々、他のアプリケーションのためにそれを解放するために、アイドルアプリケーションの未使用のRAMを識別し、それは、アプリケーションが消費するリソースにそれ以上カウントされません。

  2. このようなハイブリッドアプリでは、ほとんどのメモリはGarbage collectorのために.Netフレームワークによって予約されています。 GCはアイドルモードで動作し、メモリをフリー/コンパクトにします。何が起こったのかもしれない。アプリのいくつかのログをmonitor the actual FastMM4 heap consumptionに追加してください。

  3. メモリリークが発生する可能性があり、32ビットプロセスの2GB制限に達しています。 set the 3GB flag for the exeを試してください。または、64ビットの実行可能ファイルに切り替えます。これにより、.Netコードが幸せになります。アプリが安全であることを確認するためにFastMM4 in memory leak reporting modeを実行してください。

関連する問題