問題タブ [fastmm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2911 参照

delphi - 現在のFastMMリリースとDelphiXEのデフォルト

DelphiXEでのサードパーティコンポーネントのスレッドコードの処理方法で問題が発生しています。私たちのコアアプリケーションはそれ自体でマルチスレッドコードを実装していないため、サードパーティと言います。SimpleShareMem(メインアプリと文字列データを共有するdllがいくつかあります)を使用すると奇妙なメモリ破損が発生することがわかりましたが、FastMM4ユニットをインストールするとこれらのエラーは消えます。そして奇妙なことに、エラーは同じ一般的な領域にありますが、2回続けて同じになることはめったにありません。最初にFastMM4をインストールしてエラーの原因を特定しようとしましたが、実際には、インストール時に発生しません。オプションセットに条件を設定して、プロジェクトグループ内のすべてのモジュールをSimpleShareMemとFastMMの間で切り替えられるようにしました。

私の直接の例はTRichViewです。hunspellスペルチェッカーを使用すると、PaintBuffered / PaintToプロシージャ内またはその近くで、貼り付けと上向きのクリックスクロールを何度も同時に行うことでエラーが発生する可能性があることがわかりました(必要な回数は異なります)。これを実行してエラーを生成します)。表面化された例外に解決されるのは外部例外である場合もあれば、例外処理コード内でスタックオーバーフローに到達する場合もあります。

私が遭遇した別の例は、AnyDAC(DA-SOFT)リモート/ファイル監視システムです。これも別のスレッドで実行され、SimpleShareMemでは機能しませんが、FastMM4では正常に機能します。

これらの経験に基づいて、私は本番ビルドにFastMM4ユニットを使用してビルドすることを余儀なくされています。もちろん、私は常に自分のコードを最初に疑うので、FastMM4はメインアプリにスタックの破損などがあるとは表示しませんが、問題を悪化させるために何かできることがあるかどうか疑問に思っています。

だから、私の質問は、Delphi XEが使用しているFastMMのどのバージョンよりも、FastMM4がマルチスレッド操作でうまく機能する理由を誰かが考えることができますか?

更新:古いSharemem / borlndmm.dllの概念を使用していくつかのテストを行ったので、それも問題なく機能することを追加したいと思います。

アップデート2:提案ありがとうございます。私は自分の問題を引き起こしている特異なバグを見つけようとしてきましたが、ほとんど成功していません。私は追加の観察を持っています。

ShareMemを必要とするDLLがロードされないようにメインアプリを変更した場合、使用しているメモリマネージャーに関係なく、AnyDACロギングまたはTRichViewのいずれにも問題はありません。そのDLL(FastMMの初期インスタンスを起動し、メインアプリと共有される)をロードするという行為自体が、そのdllを呼び出さなくても問題を引き起こします。次に行うことは、メインアプリを変更して、そのdllの動的ロードを有効にし(したがって、メモリマネージャーをメインアプリに強制的にインストールする)、それが違いを生むかどうかを確認することです。

更新3: dllを動的にロードすると、ロードしないのと同じ効果があります...すべてが機能します。

0 投票する
1 に答える
580 参照

delphi - FastMM4をフルデバッグモードで使用していない場合、Delphi XE2のメモリマネージャーよりも高速ですか?

私はFastMM4を使用していますが、通常は開発中に完全なデバッグモードで使用します。このモードをオフにした場合、アプリをDelphi(XE2)MMに戻すように調整する必要がありますか、それともFastMM4を常にリンクしたままにしておくことでパフォーマンス上の利点がありますか?

0 投票する
1 に答える
15276 参照

delphi - FastMM4 で完全なデバッグ モードを有効にする方法は?

FastMM の使い方がわかりません。SourceForgeからダウンロードし、FastMM4Messages.pas と FastMM4.pas を dpr ファイルの先頭に配置しました。

この手順を呼び出して、メモリをリークします。

そしてこのメ​​ッセージを受け取ります ここに画像の説明を入力

これらの FullDebugMode および LogMemoryLeakDetailsToFile スイッチを有効にするにはどうすればよいですか?

0 投票する
1 に答える
2694 参照

delphi - 特定のメモリ ブロックが FastMM によって解放されていないかどうかをプログラムで確認する方法はありますか?

メモリのブロックが解放されていないかどうかを検出しようとしています。もちろん、マネージャはダイアログ ボックスまたはログ ファイルでそれを教えてくれますが、結果をデータベースに保存したい場合はどうすればよいでしょうか。たとえば、データベーステーブルに、特定のブロックを割り当てたルーチンの名前を付けたいと思います。

FastMM のドキュメントを読んだ後、バージョン 4.98 以降、メモリの割り当て、解放、および再割り当てが発生すると、マネージャーから通知される可能性があることがわかりました。たとえば、有用な情報を含むOnDebugFreeMemFinishイベントが私たちに渡されます。PFullDebugBlockHeader欠けているものが 1 つありPFullDebugBlockHeaderます。指定されたブロックがアプリケーションによって解放されたかどうかの情報です。

OnDebugFreeMemFinish解放されていないブロックに対してのみ呼び出されない限り? これは私が知らないことであり、調べたいと思っています。

問題は、イベントにフックしてもOnDebugFreeMemFinish、ブロックが解放されたかどうかを確認できなかったことです。

以下に例を示します。

私が欠けているのは、次のようなコールバックです:

FastMM のソースを閲覧した後、手順があることがわかりました。

これはオーバーライドできますが、もっと簡単な方法がありますか?

0 投票する
1 に答える
648 参照

delphi - FastMMまたはGetProcessMemoryInfoによって報告されたメモリ使用量の違いを説明できるものは何ですか?

私のDelphiXEアプリケーションは、RemObjectsによって作成されたローカルサーバーDLLを使用する単一のEXEに基づいており、十分なメモリがないという例外を生成するまで、特定の操作に大量のメモリを使用します。だから私はこれが起こっている理由と場所を理解しようとしているので、メモリ使用量を報告するコード全体にさまざまなステップを配置しました。問題は、メモリ使用量情報を取得するために使用される方法に基づいて、非常に異なる情報を取得していることです。

  1. FastMMにクライアントEXEとサーバーDLLの両方を直接要求するここで説明する方法を使用すると、次のようになります。

    • ステップ1:[クライアント]=36664572-[サーバー]=3274976
    • ステップ2:[クライアント]=62641230-[サーバー]=44430224
    • ステップ3:[クライアント]=66665630-[サーバー]=44430224
  2. ここで説明したGetProcessMemoryInfoを使用するメソッドを使用すると、はるかに多くのメモリ使用量が得られます。

    • ステップ1:[プロセス] = 133722112
    • ステップ2:[プロセス] = 1072115712
    • ステップ3:[プロセス] = 1075818496

私のメモリの問題に基づいて、2番目の方法が正しいように見えますが、FastMMの方法をどのように「低く」することができますか?そして、何が違いを説明できますか?

0 投票する
1 に答える
281 参照

delphi - Delphi 6 アプリケーション インストール ファイルに FastMM インクルード ファイルを同梱する必要がありますか?

Delphi 6 アプリケーションで FastMM4 を使用しています。アプリをユーザーの PC にインストールするために、作成したインストール ファイルと共にインクルード ファイル (FastMM4Options.inc) を同梱する必要がありますか? その場合、メインの EXE ファイルと同じディレクトリに配置する必要がありますか?

実行時に FastMM の設定を制御する FastMM インクルード ファイルについて言及しています。現在、このファイルは、Delphi IDE 環境オプションで指定されたライブラリ パスを介してアクセスできるディレクトリにありますが、インストール プログラムに含めることは考えていませんでした。

0 投票する
5 に答える
944 参照

delphi - メモリリークを探す以外に、アプリケーションを破棄するときにすべてのオブジェクトを解放する必要がある別の状況はありますか?

いくつかのフォームを備えたアプリケーションがあり、開始時に1つのデータモジュールのみが作成されたとします。DM1.OnCreateイベントでは、実行時に使用するためにaがTStringList作成されます。アプリケーションが終了すると、すべてのものが破棄され、メモリが自動的に解放されることがわかっています。何かを解放するには時間がかかることがあるため、シャットダウン時のメモリリークについて常に心配することをお勧めします。たとえば、Barry Kellyからのこの回答、またはRaymondChenからのこの投稿を参照してください。

TStringList.Freeそれに加えて、に追加しない場合、FastMMはメモリリークを報告しますDM1.OnDestroyこれは、私が本当に心配すべき他のメモリリークを検索するときに問題になることがわかりました。

したがって、基本的には、アプリケーションまたはOS(この特定のケースではWindows)によって解放されるオブジェクトインスタンスを解放する必要があるかどうか、なぜ、いつ解放する必要があるかを尋ねています。メモリリークを探すときにない他の有効なケースはありますか?

:この特定のケースでは、データモジュールは何度も作成または再作成されません。1つを除いて、メモリリークはまったくありません。データモジュールのスクラップソース:

0 投票する
1 に答える
309 参照

delphi - FinalBuilder サーバー + FastMM4 の例

継続的インテグレーションに FinalBuilder サーバーを使用する場合 - 一連のユニット テストを実行し、FastMM メモリ リーク チェックに基づいてビルドの成功/失敗を確立するための推奨される方法は何ですか?

0 投票する
2 に答える
2719 参照

delphi - FastMM4、ログファイルの読み方は?

私はソフトウェアに取り組んでいるので、プロジェクトで FastMM4 (実際に) を使い始めたばかりです。

line numberFastMM4 でを取得する方法についてネットで見つけました。行番号を取得しましたが、ログ内の他の情報が何を意味するかを理解できますか?

私はこれをログファイルに持っています

この中にleakある

私のコード

ここに画像の説明を入力

そしてここにcall stack ここに画像の説明を入力

ネットで検索しましたが、他に何が検出されたのかわかりません...

使っていますdelphi 2006

delphi 6, delph 7も同じものを開いて試しました

これは、 fastMM $ の検出と、すでに Delphi にあるいくつかのリークの登録に関連していることを確認しました。 fastMMでトリッキーなメモリリークを追跡する方法は? これはリークを登録するためのものですが、バグですか? FastMM4 を使用して、漏洩した文字列を登録する方法は?

また、FastMM4、Delphi6、TApplication のリーク?

またare they just the steps leading to the memory leak?

0 投票する
1 に答える
583 参照

delphi - FastMMは、リークされたメモリや割り当てられたメモリのみを報告しますか?

FastMMを使用してプログラムをデバッグしていますが、報告されているメモリリークの多くは、実際のメモリリークではなく、正当なメモリ割り当てのようです。

例えば、

TConnObjは、オブジェクトを作成するために頻繁に使用されるクラスであり、プログラムがオブジェクトを必要としなくなったときに破棄されます。ただし、FastMMは、実際のメモリリークであると報告しています。では、FastMMメモリリークログファイルを見ると、どれがどれであるかをどのように判断できますか?