我已经阅读并练习了MSDN 的 Profiler Tutorial。但我找不到分析库解决方案的方法(库禁用了“使用分析启动”按钮)。
- 到目前为止,我能想到的唯一解决方案是创建一个仅用于分析目的的可执行项目。
- 我已经使用 Visual Studio Team System 的测试框架为我的库编写了单元测试,所以我想我可以将它们用于配置文件,就像 Rick Minerich 对 NUnit 所做的那样。
谁能指出我正确的方向?
我已经阅读并练习了MSDN 的 Profiler Tutorial。但我找不到分析库解决方案的方法(库禁用了“使用分析启动”按钮)。
谁能指出我正确的方向?
可以使用您的测试进行分析。您只需在启动测试的任何地方运行探查器,并将您的要探查的程序集指定为探查器目标。但是,如果不确切知道您用于测试和分析的基础架构,则几乎不可能为您指明解决方案。
因为我使用的是 NUnit,所以我将使用它作为示例。您可以创建一个测试类别并将其称为配置文件测试。然后,您可以使用 /include 命令行选项从探查器运行 nunit.exe 来指定这些测试:
nunit-console myassembly.dll /include:Profile
您可以使用分析-> 性能向导来执行此操作。dll 路径将是您的程序集,而可执行路径将是上面提到的 nunit-console 命令行。
我还知道ReSharper 为 Visual Studio 添加了扩展来为您执行此操作。有了它,您只需右键单击一个测试并选择“Profile TESTNAME”。虽然确实要花钱,但我认为您可以查看评估版本。
另外,请注意,请务必使用 Release 库进行概要分析。发布和调试通常有很多不同的性能配置文件。
分析是一种运行时技术,所以如果我理解得很好,你必须运行你的软件,这样你才能运行时分析它。
您也不能正常运行库,最简单的选择是运行测试或创建使用该库的简单 exe。您可以仅检测 dll,以便仅在您想要的位置进行分析。
这没有多大意义。Visual Studio 探查器不会对您的代码执行静态分析来报告它的速度。它允许您运行它,并检测代码或对运行的代码进行采样,以估计每个代码部分需要多长时间。
鉴于此,您将如何描述您的图书馆?Visual Studio 如何知道您的测试,以及您想要运行哪些测试以进行分析?
回答:你制作一个可执行文件并调用这些测试,它就是这样知道的。
默认情况下,所有项目都必须进行程序测试。这是练习代码更容易的模式。现在您应该考虑涵盖所有条目的可能性。他还将使用覆盖工具。
实际上,您可以将任何可执行文件添加到目标列表(右键单击目标)。
Program.cs 的文本非常简单:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
YourDllLibrary.Tests.TestClass t = new YourDllLibrary.Tests.TestClass();
t.Init();
MethodInfo[] m = t.GetType().GetMethods();
for (int i = 0; i < m.Length; i++)
{
MethodInfo mi = m[i];
if (mi.DeclaringType.Name != t.GetType().Name )
continue;
if(Attribute.GetCustomAttribute(mi,
typeof(Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute)) == null)
continue;
try
{
Console.Write(mi.Name + " - ");
mi.Invoke(t, null);
Console.WriteLine("passed");
}
catch
{
Console.WriteLine("failed");
}
}
}
}
}