我有一个signalr服务器,它托管在IIS中。集线器中有一个函数,它在windows中启动600个进程,然后杀死它们。
//start 600 processes
for (int i = 0; i < 600; i++)
{
try
{
Process myProcess = Process.Start(startInfo);
proclist.Add(myProcess);
Task.Delay(10).Wait();
}
catch(Exception e)
{
feedback = "Process " + i + " cannot be started: " + e.Message;
break;
}
feedback = "All processes are running.";
}
//kill them
foreach (var proc in proclist)
{
try
{
proc.Kill();
Task.Delay(10).Wait();
}
catch (Exception e)
{
feedback = "Process " + proclist.IndexOf(proc) + " cannot be killed: " + e.Message;
break;
}
feedback = "All Processes are killed.";
}但是,当我在客户机中调用这个函数时,我会得到一个异常,它会杀死进程:
进程104号不能被杀死: da kann nicht verarbeitet werden,da der Prozess be t wurde(请求不能进行,因为该过程已经结束)。
看来我只能保持104个进程运行。其余的都会在开始后立即终止。
因此,我想问一下,是否有人知道如何在ASP.NET应用程序中启动更多过程。
如果有人能帮我,我会非常感激的。谢谢!
发布于 2016-05-10 13:51:49
我强烈建议您不要在ASP.NET下执行600个进程(或任何多个进程),这样会使Aspnet_wp.exe进程上的资源紧张,从而损害IIS的性能。
你得重新考虑一下设计。
如果是我,我会考虑在ASP.NET之外创建一个外部流程,它可以为您完成艰苦的工作。例如,您可以创建一个Windows (甚至是运行在服务器上的.NET控制台应用程序),该服务可以在文件系统文件夹上等待(例如侦听)创建一个文件(您可以将该文件命名为任何您喜欢的start.txt),在向您的网站发出请求时可以这样做。然后,该服务将为您执行600个exe文件。
我不熟悉lasttest,所以我的建议可能不够。然而,我不相信你会实现你正在寻找的使用你目前的设计。这会损害性能,事实上,我不知道已经达到了运行进程的极限。我不知道有任何文档指出您可以在Aspnet_wp.exe中运行多少exe文件,但这很可能是因为ASP.NET团队从未料到有人会尝试这样做。
https://stackoverflow.com/questions/37138399
复制相似问题