我正在使用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 /或帮助解决过多的内存使用。