首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows服务生成的进程运行速度比GUI生成的进程慢3到4倍

Windows服务生成的进程运行速度比GUI生成的进程慢3到4倍
EN

Stack Overflow用户
提问于 2016-01-27 16:59:48
回答 2查看 102关注 0票数 1

我已经用Borland C++编写了一个服务应用程序。效果很好。在ServiceStart(TService *Sender,bool &Started)例程中,我调用mjwinrun来启动一个进程,该进程可以拾取并处理宏。此进程没有UI,任何错误都会记录到文件中。它继续运行,直到服务器重新启动、关闭或使用任务管理器终止进程为止。这是mjwinrun :-

代码语言:javascript
运行
复制
int mjwinrun(AnsiString cmd)
{
  STARTUPINFO mjstupinf; PROCESS_INFORMATION mjprcinf;
  memset(&mjstupinf,0,sizeof(STARTUPINFO)); mjstupinf.cb=sizeof(STARTUPINFO);
  if (!CreateProcess(NULL,cmd.c_str(),NULL,NULL,TRUE,0,NULL,GetCurrentDir().c_str(),&mjstupinf,&mjprcinf))
  {
    LogMessage("Could not launch "+cmd); return -1;
  }
  CloseHandle(mjprcinf.hThread); CloseHandle(mjprcinf.hProcess);
  return mjprcinf.dwProcessId;
}

cmd是启动宏队列处理器的命令行。我使用了一个CPU/内存密集型宏,并让它将其时间写入文件。以下是我的发现:-

1)如果宏处理器是在登录会话内从命令行启动的,则无论在哪个Windows内核下运行,宏都在6秒内完成。

2)如果宏处理器是从Vista内核或更早启动的服务(使用上面的mjwinrun )启动的,则宏将在6秒内完成。

3)如果宏处理器是从Windows 7内核或更高版本启动的服务(使用上面的mjwinrun )启动的,则宏将在超过18秒内完成。

我已经为CreateProcess尝试过所有不同的标志,它们都没有区别。我已经尝试了所有不同的帐户为这项服务,这没有任何区别。我试着为任务设置所有不同的优先级,I/O和Page,但它们都没有区别。这就好像服务产生的进程在某种程度上是节流的,不是在I/O方面,而是在CPU/内存使用方面。有什么想法吗? Windows 7的变化是什么?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35043542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档