1

我正在使用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;

当您运行代码两次时,FreeAndNil for TPythonEngine 上的内存没有很好地释放。如果你循环更多,它会导致应用程序崩溃,因为没有更多的内存可用。是否缺少一些真正释放 TPythonEngine 的参数?

我尝试 UnloadDLL、Finalize、设置各种属性,如 AutoLoad/AutoFinalize 等...

我可以跑几次

FPythonEngine.ExecStrings(FPytonScript);

这不会造成异常的内存使用,但我的目标是创建一个包含 Pythonengine 的 Delphi 对象。这些对象被创建/销毁多次,因此内存使用对我的行为不利。

任何建议或更新的库将 Python 与 Delphi 2010 一起使用/或帮助解决过多的内存使用。

4

0 回答 0