Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Visual Studio 2013测试运行程序(VSTest)大大降低了测试的执行速度_C#_Performance_Visual Studio 2010_Unit Testing_Visual Studio 2012 - Fatal编程技术网

C# Visual Studio 2013测试运行程序(VSTest)大大降低了测试的执行速度

C# Visual Studio 2013测试运行程序(VSTest)大大降低了测试的执行速度,c#,performance,visual-studio-2010,unit-testing,visual-studio-2012,C#,Performance,Visual Studio 2010,Unit Testing,Visual Studio 2012,我有一个使用VisualStudio单元测试框架的测试套件。它最初是在VS2010的.NET4.0上开发的 升级到.NET 4.5/VS2013后(没有逻辑更改,只是在csproj文件中碰撞.NET版本),相同的测试运行速度慢2倍。在IDE内执行或从控制台(vsconsole/vstest)执行时都会发生这种情况 在我移植了一些升级的测试以使用NUnit之后,执行时间恢复正常@4.5/2013。我完全不知道根本原因是什么以及如何解决这个问题。主要嫌疑犯是VSTest的InIsolation参数,

我有一个使用VisualStudio单元测试框架的测试套件。它最初是在VS2010的.NET4.0上开发的
升级到.NET 4.5/VS2013后(没有逻辑更改,只是在csproj文件中碰撞.NET版本),相同的测试运行速度慢2倍。在IDE内执行或从控制台(vsconsole/vstest)执行时都会发生这种情况

在我移植了一些升级的测试以使用NUnit之后,执行时间恢复正常@4.5/2013。我完全不知道根本原因是什么以及如何解决这个问题。主要嫌疑犯是VSTest的InIsolation参数,但它似乎对执行时间没有任何影响。对以上所有方面有什么想法吗?我不能移植所有的测试,因为有很多测试,而且这种方法需要在更改构建脚本时付出更多的努力。

事实证明,当生成大量类时,基础结构会产生很大的性能开销。我们通过为不使用垫片的方法创建显式的“无垫片”上下文并仅标记生成垫片所需的类来解决问题:

/// <summary>
/// Executing method without ShimsContext being created.
/// </summary>
/// <param name="action">Action to execute.</param>
/// <remarks>Usage: ExecuteWithoutShimsContext(()=> TestMethod()); </remarks>
public static void ExecuteWithoutShimsContext(FakesDelegates.Action action)
{
    if (action == null)
    {
        throw new ArgumentNullException("action");
    }
    using (UnitTestIsolationRuntime.AcquireProtectingThreadContext())
    {
        action();
    }
}
//
///在不创建ShimsContext的情况下执行方法。
/// 
///要执行的操作。
///用法:ExecuteWithoutShimsContext(()=>TestMethod());
public static void ExecuteWithoutShimsContext(FakesDelegates.Action)
{
if(action==null)
{
抛出新的异常(“操作”);
}
使用(UnitTestIsolationRuntime.AcquireProtectionThreadContext())
{
动作();
}
}
System.fakes配置文件示例:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="System" Version="4.0.0.0"/>
    <ShimGeneration>
        <Clear/>
        <Add FullName="System.Diagnostics.Process"/>
        <Add FullName="System.Net.Sockets.TcpClient"/>
        <Add FullName="System.Net.Sockets.NetworkStream"/>
        <Add FullName="System.ComponentModel.BackgroundWorker"/>
        <Add FullName="System.ComponentModel.Component"/>
        <Add FullName="System.Timers.Timer"/>
    </ShimGeneration>
</Fakes>