【问题标题】:Stress Test visual studio with multi core cpu具有多核 cpu 的压力测试视觉工作室
【发布时间】:2026-01-01 09:35:02
【问题描述】:

我如何配置 Visual Studio 的测试项目以使用所有 CPU 的核心。

当我运行测试时,我可以在性能指标上看到只有一个内核正在使用 (100%),其余 7 个内核未使用。

我在测试项目中有一个调用统一测试的负载测试。

我设置了 200 个用户来调用一个方法。但我需要使用所有核心。

【问题讨论】:

  • 是测试项目中的负载测试。
  • 感谢 Fouz,我发现了这一点:“当您在多核计算机上运行负载测试时,负载生成受到以下限制:如果计算机正在运行 Visual Studio Team System Test Edition 或 Visual Studio Team系统,负载生成仅限于一个内核。如果计算机正在运行 Visual Studio Team System Test Load Agent,则负载生成不受限制;它运行在所有内核和处理器上。但是我正在使用 Visual Studio 2010 Ultimate,并且该消息指的是 Visual 2008。

标签: visual-studio stress-testing


【解决方案1】:

丹尼斯,根据MSDN

“在非测试控制器方案中添加 Visual Studio 负载测试虚拟用户包 2010 具有解锁所有机器处理器以供使用的额外好处。如果没有 Visual Studio 负载测试虚拟用户包 2010,您的本地机器只能使用第一个处理器。添加 Visual Studio 负载测试虚拟用户包 2010 后,负载测试在运行时可以使用机器上的所有处理器。”

因此,如果您没有用户包许可证,则无法解锁额外的内核。

【讨论】:

    【解决方案2】:

    您的测试代码很可能都是单线程的。单元测试是按顺序运行的,所以除非每个测试中的代码都是多线程的,否则它只会在一个线程中运行。

    注意在多线程中运行测试可能会产生不良后果,单元测试应该只测试单元,如果是多线程的,那么测试应该是单线程的。

    【讨论】:

      【解决方案3】:

      你必须在多个线程中工作。试试这个:

      class Program
      {
          static bool isRunning = true;
      
          static void Main(string[] args)
          {
              BackgroundWorker bw1 = new BackgroundWorker();
              BackgroundWorker bw2 = new BackgroundWorker();
      
              bw1.DoWork += delegate(object sender, DoWorkEventArgs e)
              { while (isRunning) { } };
      
              bw2.DoWork += delegate(object sender, DoWorkEventArgs e)
              { while (isRunning) { } };
      
              bw1.RunWorkerAsync();
              bw2.RunWorkerAsync();
      
              Console.ReadLine();
              isRunning = false;
      
          }
      }
      

      您可以根据您拥有的核心数量增加后台工作人员的数量(此示例将我的双核计算机最大化)。您可以在运行工作程序后放置您的代码,然后通过更改 isRunning 的值来停止它们。

      【讨论】:

      • 我的单元测试可以在单核上执行。我需要的是 Visual Studio 使用我所有的核心来连接用户单元测试。