CreateProcess的快速替代品

ott*_*uit 2 delphi performance pascal exe createprocess

我正在寻找Delphi中CreateProcess的快速替代方法来在exe中执行某些计算,包括XML中的几个返回值.目前,我正在使用某些参数调用C#-exe.其中一个电话约需要.0.5秒-这是方式昂贵,因为此exe需要调用几百次(unfortunatley反复调用,即多线程不会加快工作).

我当前的代码看起来像这样(找到解决方案来获取StackOverflow上的exe somwhere的控制台输出).

IsExecutable := CreateProcess(
            nil,
            PChar(WorkDir + Exe + CommandLine),
            nil,
            nil,
            True,
            HIGH_PRIORITY_CLASS,
            nil,
            nil,
            StartupInfo,
            ProcessInformation);
CloseHandle(StdOutPipeWrite);
    if IsExecutable then
      try
        repeat
          WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
          if BytesRead > 0 then
          begin
            Buffer[BytesRead] := #0;
            Result := Result + Buffer;
          end;
        until not WasOK or (BytesRead = 0);
        WaitForSingleObject(ProcessInformation.hProcess, INFINITE);
      finally
        CloseHandle(ProcessInformation.hThread);
        CloseHandle(ProcessInformation.hProcess);
      end
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我不是很好的德尔福 - 实际上,我觉得"我不知道我在做什么"的狗咪模因......

Dav*_*nan 8

创建新流程非常昂贵.没有其他选择CreateProcess.这里没有快速修复.没有神奇的按钮可以让流程创建速度超快.

解决问题的方法是停止创建一个新流程.在您的流程中执行此任务.