是否可以在ASP.NET应用程序中启动进程数限制?

时间:2016-05-10 12:20:45

标签: asp.net iis signalr windows-process worker-processes

我有一个信号服务器服务器,它托管在IIS中。 集线器中有一个功能,它在窗口中启动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:Die Anforderung kann nicht verarbeitet werden,da der Prozess wasdet wurde(请求无法继续,因为该进程已经终止。)

似乎我只能保持104个进程运行。其余的人在开始后立即终止。

  • 我在控制台应用程序中尝试了相同的操作,并且可以启动和终止所有进程。
  • 我尝试使用其他应用程序消耗大量内存,我也可以保持104个进程运行。
  • 我尝试使用其他应用程序消耗大量内存,我也可以保持104个进程运行。
  • 我还检查了所有可能的IIS配置,但找不到与此问题相关的任何设置。

所以我想问一下是否有人知道如何在ASP.NET应用程序中启动更多程序。

如果有人可以帮助我,我将非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

我强烈建议您不要在ASP.NET下执行600(或任何数百个)进程。您将真正使Aspnet_wp.exe进程上的资源紧张,这可能会损害IIS框的性能。

你需要重新思考设计。

如果这是我,我会考虑在ASP.NET之外创建一个外部流程,它可以为您完成艰苦的工作。例如,您可以创建一个Windows服务(甚至只是在服务器上运行的.NET控制台应用程序),它等待(即监听)文件的文件系统文件夹(您可以将文件命名为任何您喜欢的文件,例如{{ 1}})创建当您对网站发出请求时可以执行的操作。然后该服务将为您执行600 exe文件。

我不熟悉start.txt,所以我的建议可能不够充分。但是,我不相信您会使用当前的设计实现您的目标。这会损害性能,事实上,我并不会惊讶于已经达到了运行进程的限制。我不知道有哪些文档指出你可以在lasttest中运行多少个exe文件,但这很可能是因为ASP.NET团队从未期望任何人试图这样做。