【问题标题】:Unable to start multiple Processes (C#)无法启动多个进程 (C#)
【发布时间】:2014-08-18 19:37:16
【问题描述】:

我无法从控制台应用程序成功启动多个进程。 我有一个带有控制台应用程序 A 的 Visual Studio 解决方案,它必须启动另一个控制台应用程序 (B) 的多个实例。

B 在循环中运行,在进程参数中指定的端口上捕获传入的网络流量。

为了简化问题,我删除了所有网络逻辑并使其尽可能基本,但我仍然遇到同样的问题。

A 的代码,其中 Test.exe 是控制台应用程序 B:

   static void Main(string[] args)
   {
        try
        {
            for (int i = 0; i < 5; i++)
            {

               System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo { FileName = "Test.exe" });                  

            }

        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }

    }

B 代码:

    static void Main(string[] args)
    {
        int counter = 0;
        while (Console.KeyAvailable == false || Console.ReadKey().Key != ConsoleKey.Escape)
        {
            Console.WriteLine("" + counter);
            System.Threading.Thread.Sleep(1000);
            counter++;
        }
        Console.ReadLine();
    }

在 Visual Studio 调试中运行控制台应用程序 A 后,A 会按预期弹出,但 B 的一个窗口仅弹出一个窗口,开始按指定计数。但是,如果我查看我的任务管理器,我可以看到实际上有两个 Test.exe 正在运行,其中一个正在使用 116K 内存,另一个正在使用 180,000K 内存。

一旦计数器达到 15,它会关闭并打开两个新窗口,这两个窗口都从 0 开始计数。这种行为会继续,每次计数器达到 15 时都会打开 B 的新实例,直到 A 中指定的 5 个实例正在运行。

显然这种行为不是我想要的,我希望 A 立即启动 B 5 次(在此示例中),而无需等待进程退出。

【问题讨论】:

  • 在 VS 之外运行 A 时是否得到相同的行为?
  • 我刚测试,马上就得到了5个Test.exe实例。
  • 如果我在 VS 之外运行 A,则行为不稳定,有时会启动 5,有时会启动 4。但是,10 秒后,它们都会关闭,并且会再次弹出一个新的 B 实例我可以在任务管理器中看到两个Test.exe进程,一个使用116K内存,另一个使用180,000K内存。
  • 即使我删除了 A 中的循环并仅启动一个进程,我的任务管理器仍会说 B 的两个实例正在以上述内存使用情况运行。
  • 程序A不应该等待任何东西,而是在启动B后继续执行

标签: c# process console


【解决方案1】:

重新安装 .net 并删除我不再需要的某些功能后,它终于按预期工作了。启动 50 个实例没问题,奇怪的内存使用也不再明显。

罪魁祸首是用于 VS 的 Windows Phone SDK 或 Windows Azure。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2016-11-24
    • 2018-12-11
    • 2013-10-09
    相关资源
    最近更新 更多