Multithreading 多线程期间Delphi CPU使用率低
在执行多线程程序的过程中,我在Delphi事件日志中看到8个线程开始 我的CPU是Intel 7,4核超线程,因此有8个计算核,但在我的TaskManager的“性能”选项卡上,我看到只有12%的CPU使用率,只有一个核的计算性能高达70-80%。我确实使用OTL和ParallelFor编译了我的多线程程序,但仍然只有12%的性能,只有一个内核在工作 在我的表单1中,我有一个带有OTL parallel.foreach的ButtonClick过程,它迭代StingList中的项。 StringList行包含每个文件的名称、不同数据文件的路径和文件的数据格式。 ForEach.execute在其他单元上启动“EntrySearch”过程, EntrySearch过程从Stringlist的适当行提取信息开始。 在“While XMultithreading 多线程期间Delphi CPU使用率低,multithreading,performance,delphi,otl,Multithreading,Performance,Delphi,Otl,在执行多线程程序的过程中,我在Delphi事件日志中看到8个线程开始 我的CPU是Intel 7,4核超线程,因此有8个计算核,但在我的TaskManager的“性能”选项卡上,我看到只有12%的CPU使用率,只有一个核的计算性能高达70-80%。我确实使用OTL和ParallelFor编译了我的多线程程序,但仍然只有12%的性能,只有一个内核在工作 在我的表单1中,我有一个带有OTL parallel.foreach的ButtonClick过程,它迭代StingList中的项。 StringL
{the OTL in the ButtonClick procedure}
Parallel.ForEach(0, StrList.Count-1)
.PreserveOrder
.NumTasks(CPUCount)
.NoWait
.Execute(
procedure(const value: integer)
begin
CalcUnit.EntrySearch(value);
end);
{procedure on CalcUnit}
procedure EntrySearch(value: integer);
begin
{extract Name, Path DataFile and DataFormat from StringList}
While X < Y do begin
AssignFile(qMSInputFile7, Path);
{$I-} reset(qMSInputFile7); {$I+}
While Not eof(qMSInputFile7) do Begin
with qMetaRec7 do begin
Read (qMSInputFile7, qMetaRec7);
{ Extract the Data}
end; // While not eof
{Make calculations}
end; // While X<Y
end;
出了什么问题?我怎样才能解决这个问题。
非常感谢。第一句话有误导性。您的意思是在程序执行期间,而不是在编译期间。为什么您的程序不能并行执行?可以在您的程序中找到答案。您需要显示一个@David Hefferman,谢谢,已将编译更改为执行。请尝试使用其他内存管理器,例如scalemm或synscalemm。还可以尝试在Windows上使用线程池和IOCP。@在非常有帮助的地方添加您的注释!非常感谢。通过您提供的调试链接,我发现我的问题确实是全局变量。我的计算过程是在一个单独的单元上进行的,认为整个单元都包含在线程中。现在我把所有变量都放在程序中,我的问题就解决了。我学到了很多!再次感谢,向弗里茨致以最良好的问候