我正在从另一个线程运行管道(来自 OmniThreadLibrary 的线程管道),并且出现内存泄漏或更确切地说是内存消耗。但是当应用程序关闭时就可以了,并且没有内存泄漏报告(ReportMemoryLeaksOnShutdown := True;
)。
此处示例:单击按钮 10 次,测试应用程序将获得约 600 MB 的内存。Windows 7 x64,Delphi XE6,最新的全源。
这是一个错误?或者我需要使用其他代码?
uses
OtlParallel,
OtlCommon;
procedure TForm75.Button1Click(Sender: TObject);
begin
// run empty pipeline from another threads
Parallel.&For(1, 100).Execute(
procedure(value: integer)
var
pipe: IOmniPipeline;
begin
pipe := Parallel.Pipeline
.Stage(procedure(const input: TOmniValue; var output: TOmniValue) begin end)
.Run;
pipe.Cancel;
pipe.WaitFor(100000);
pipe := nil;
end
);
end;
编辑 1:
使用 ProcessExplorer 测试该代码,发现运行时线程数是恒定的,但句柄数增加了。如果我Application.ProcessMessages;
在“for循环”的末尾插入(在管道代码之后)然后测试应用程序运行良好,句柄正在关闭并且内存消耗是恒定的。不知道为什么。