中国服务器网

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

Windows服务产生的进程比GUI产生的进程慢3至4倍

我用Borland C ++编写了一个服务应用程序。 它工作正常。 在ServiceStart(TService * Sender,bool&Started)例程中,我调用mjwinrun来启动一个进程来处理macros。 这个过程没有用户界面,任何错误logging到一个文件。 它将继续运行,直到服务器重新启动,closures或使用任务pipe理器终止进程。 这是mjwinrun: – 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是启动macros队列处理器的命令行。 我使用了一个CPU /内存密集型的macros,并将它的时序写入文件。 这是我发现的: 1)如果在login会话中从命令行启动macros处理器,则无论运行的是哪个Windows核心,macros都将在6秒内完成。 2)如果macros处理器是从Vista核心或更低版本(使用上面的mjwinrun)启动的服务启动的,则macros在6秒内完成。 3)如果macros处理器是从在Windows 7内核或更高版本上启动的服务(使用上面的mjwinrun)启动的,则macros将在超过18秒内完成。 我已经尝试了CreateProcess的所有不同的标志,没有一个有所作为。 我已经尝试了所有不同的服务帐户,这没有任何区别。 我尝试设置任务,I / O和Page的各种优先级,但都没有区别。 就好像这个服务的产生的进程在某种程度上受到了限制,而不是以I / O方式,而是在CPU /内存使用方面。 任何想法在Windows 7以后发生了什么变化?