我已阅读并练习MSDN's Profiler Tutorial。但是我找不到一种方法来分析库解决方案(对于库,禁用了“启动分析”按钮)。
任何人都能指出正确的方向吗?
答案 0 :(得分:4)
可以使用您的测试进行分析。您只需在启动测试的任何内容上运行探查器,并将您要成为待定的程序集指定为探查器目标。但是,如果不确切知道您正在使用哪种基础设施进行测试和分析,那么几乎不可能指出您的解决方案。
因为我使用NUnit,我会以它为例。您可以创建一个测试类别并将其称为配置文件测试。然后,您可以使用/ include命令行选项从分析器运行nunit.exe以指定这些测试:
nunit-console myassembly.dll /include:Profile
您可以使用Analyize-> Performance Wizard执行此操作。 dll路径将是您的程序集,可执行路径将是如上所述的nunit-console命令行。
我也知道ReSharper adds extensions to Visual Studio to do this for you。有了它,您可以右键单击测试并选择“Profile TESTNAME”。虽然它确实需要花钱,但我认为你可以查看一个评估版本。
另外,请注意,请务必使用发布库进行概要分析。发布和调试通常具有多种不同的性能配置文件。
答案 1 :(得分:0)
分析是一种运行时技术,所以如果我理解你必须运行你的软件,这样你就可以运行时对它进行分析。
您也无法正常运行库,最简单的选择是运行测试或创建使用库的简单exe。您可以只检测dll,以便只在需要的位置进行配置。
答案 2 :(得分:0)
这没有多大意义。 Visual Studio探查器不会对代码执行静态分析以报告其速度。它允许您运行它,检测代码或获取运行代码的样本,以估计每个代码段的使用时间。
鉴于此,你会如何建议你的图书馆? Visual Studio如何了解您的测试以及您希望运行哪些测试以进行性能分析?
答案:你制作一个可执行文件并调用这些测试,这就是它所知道的。
答案 3 :(得分:0)
默认情况下,所有项目都必须进行程序测试。这是练习代码的简单模式。现在你应该考虑涵盖条目的所有可能性。他还将使用覆盖工具。
答案 4 :(得分:0)
实际上,您可以添加目标列表(右键单击Targets)任何可执行文件。
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");
}
}
}
}
}