多个实例

| 我试图通过启动执行工作的控制台应用程序“ 0”来执行并行处理。由“ 1”启动,它知道要启动多少个实例。 该程序有时无法启动更多实例。即使增加
instancesmount
,它也只会启动到极限。在这种情况下,只有92。如果我将限制设置为100或200,它仍只会在服务器上启动92。 我正在用C#编写程序,它在Windows Server 2008中运行。 这是代码:
for (int instanceCount = 0; instanceCount < InstancesAmount; instanceCount++)
{    
    using (System.Diagnostics.Process myProcess = new System.Diagnostics.Process())
    {
        if (hiddeConsoleWindow)
        {
            myProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
        }

        myProcess.StartInfo.FileName = ExecutablePathProgram2;

        System.Security.SecureString password = new System.Security.SecureString();
        foreach (char c in ConfigurationSettingsManager.ProcessStartPassword.ToCharArray())
        {
            password.AppendChar(c);
        }

        myProcess.StartInfo.UserName = ConfigurationSettingsManager.ProcessStartUserName;
        myProcess.StartInfo.Password = password;
        myProcess.StartInfo.Domain = ConfigurationSettingsManager.ProcessStartDomain;
        myProcess.StartInfo.UseShellExecute = false;

        myProcess.Start();
    }
}
我一直在寻找是否有最大实例要启动,但是它总是说它与操作系统支持的数量一样多。 我还检查了每个会话或每个用户是否有最大实例数,但是找不到描述此类内容的东西,或者我确实错过了。     
已邀请:
        引用雷蒙德·陈(Raymond Chen)的博客:“如果要询问各种操作系统限制,则可能是在做错事”。 即使有那么多的进程,计算机实际上可以完成多少工作也有一个限制。确定系统中的处理器数量并选择要执行的并发任务数量将为您提供更好的服务。然后,您的\“ program1 \\”可以启动该进程并使用StartInfo监视该进程何时结束(并同时通过重定向输出和错误流并根据需要对其进行记录来捕获任何错误输出。一旦进程完成,然后您应该启动队列中的下一个。 当您启动那么多进程时,系统将无法在100个进程之间切换上下文,因此将无法完成任何事情。 您可能会遇到内存限制,具体取决于子进程分配的内存量。您将启动一堆进程,占用大量内存,但是什么也没做,直到处理器轮到他们来了。如果无法分配内存,则可能会阻塞并终止该进程(取决于错误处理的完成方式)。     
        这很奇怪,因为默认情况下没有硬性限制。但是,当然,这取决于启动的进程在做什么(内存消耗,句柄分配,文件等)。例如,我已经在计算机上使用\“ notepad.exe \”对其进行了测试,并且如果指定了150个实例,则可以运行150个notepad.exe。 您可以在此处查看有关进程限制的非常有趣的讨论:推动Windows的限制:进程和线程。     
        首先,我绝对同意@Garo Yeriazarian。但为彻底起见,我建议您查看此博客文章: http://xentelworker.blogspot.com/2005/10/i-open-100-explorer-windows-and-my.html     

要回复问题请先登录注册