https://github.com/pyscripter/python4delphi/tree/master/PythonForDelphiを使用 しています。実行時に TpythonEngine を削除すると、大量のメモリ使用量が解放されません。
ここにコードのスニペットがあります
FPythonEngine := TPythonEngine.Create(nil);
FPythonEngine.Version := 'python35';
FPythonIO := TPythonInputOutput.Create(nil);
FPythonEngine.IO := FPythonIO;
FPythonEngine.RedirectIO := True;
FPythonIO.RawOutput := False;
FPythonIO.UnicodeIO := True;
FPythonIO.OnSendUniData := ForwardPythonOutput;
FPythonEngine.LoadDll;
FPytonScript := TStringList.Create();
FPytonScript.Add('print(''test-memory leak'')');
FPythonEngine.ExecStrings(FPytonScript);
FPytonScript.Clear;
FreeAndNil(FPytonScript);
FreeAndNil(FPythonIO);
FreeAndNil(FPythonEngine);
コードはフォームのボタンから実行できます。また、関数の結果に TMemo を使用します。
procedure TForm4.ForwardPythonOutput(Sender: TObject; const Data: string);
begin
memo1.Lines.Add(data);
end;
コードを 2 回実行すると、TPythonEngine の FreeAndNil でメモリが十分に解放されません。それ以上ループすると、使用できるメモリがなくなるため、アプリがクラッシュします。TPythonEngine を実際にリリースするために不足しているパラメータはありますか?
UnloadDLL、Finalize、AutoLoad/AutoFinalize などのさまざまなプロパティを設定してみます...
私は数回実行することができます
FPythonEngine.ExecStrings(FPytonScript);
これは異常なメモリ使用を引き起こしているわけではありませんが、私の目標は Pythonengine を含む Delphi オブジェクトを作成することでした。これらのオブジェクトは数回作成/破棄されるため、メモリ使用量は私の動作には問題ありません。
Delphi 2010でPythonを使用するための提案または最近のライブラリ/または過剰なメモリ使用量を解決するのに役立ちます。