应用程序在Delphi中使用TPythonEngine的内存过多

时间:2017-06-09 11:43:20

标签: python delphi delphi-2010 python4delphi

我正在使用https://github.com/pyscripter/python4delphi/tree/master/PythonForDelphi 我在运行时删除TpythonEngine时遇到了大量的内存使用情况。

以下是代码片段

.msi

代码可以从表单上的按钮运行。 我还使用TMemo来获得结果:

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); 

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

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

我可以运行几次

procedure TForm4.ForwardPythonOutput(Sender: TObject; const Data: string);
begin
   memo1.Lines.Add(data);
end;

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

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

0 个答案:

没有答案