gpt4 book ai didi

c# - 多个实例

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:43 25 4
gpt4 key购买 nike

我正在尝试通过启动一个控制台应用程序 program2 来执行并行处理。它由 program1 启动,它知道要启动多少个实例。

有时程序无法启动更多实例。即使您增加 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();
}
}

我一直在寻找是否有最大实例可以启动,但它总是说它与操作系统支持的一样多。

我还检查了每个 session 或每个用户是否有最大实例数,但找不到任何描述类似内容的内容,或者我确实错过了。

最佳答案

引用 Raymond Chen 的博客:"If you have to ask about various operating system limits, you're probably doing something wrong" .

即使有那么多进程,计算机实际可以完成的工作量也是有限的。通过确定系统中处理器的数量并选择要执行的许多并发任务,您将得到更好的服务。然后,您的“program1”可以启动进程并使用 StartInfo 来监视进程何时结束(并同时通过重定向输出和错误流并根据需要记录它们来捕获任何错误输出。进程完成后,您应该启动队列中的下一个。

当您启动那么多进程时,系统将不断尝试在 100 个进程之间切换上下文,并且不会完成任何事情。

您可能会遇到内存限制,具体取决于您的子进程分配的内存量。您将有一堆进程启动并占用大量内存,但在轮到处理器时什么也不做。如果它不能分配内存,它可能会阻塞并终止进程(取决于错误处理的完成方式)。

关于c# - 多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6335396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com