Visual Studio 2008 プロファイラー ツールを使用して 1 つのライブラリ ソリューションをプロファイリングするにはどうすればよいですか?
-
06-09-2019 - |
質問
読んで実践してきました MSDN のプロファイラー チュートリアル. 。しかし、ライブラリ ソリューションをプロファイリングする方法が見つかりませんでした (ライブラリでは [プロファイリングを使用して起動] ボタンが無効になっています)。
- 今のところ私が思いつく唯一の解決策は、プロファイリング目的のためだけに実行可能プロジェクトを作成することです。
- 私はすでに Visual Studio Team System のテスト フレームワークを使用してライブラリの単体テストを作成しているので、Rick Minerich が NUnit で行っているように、それらをプロファイルに使用できると思います。
誰か私に正しい方向を教えてくれませんか?
解決
あなたのテストを使用してプロファイリングすることが可能です。あなたは、単にテストを起動されているものでプロファイラを実行し、プロファイラのターゲットとしてお使いに-プロファイリングするアセンブリを指定します。しかし、あなたがテストとプロファイリングの両方に使用している正確に何インフラ知らなくても、それが解決に向けてあなたを指すようにほとんど不可能です。
私はNUnitのを使用するので、私は例として、それを使用します。あなたは、テストのカテゴリを作成し、プロファイルのテスト、それを呼び出すことができます。 /は、これらのテストを指定するコマンドラインオプションを含めると、あなたはプロファイラからnunit.exeを実行することができます:
nunit-console myassembly.dll /include:Profile
これを行うには、Analyize->パフォーマンスウィザードを使用することができます。 dllファイルのパスはあなたの組み立てだろうと実行可能ファイルのパスは、上記のようにNUnitの-コンソールのコマンドラインになります。
また、単なるメモとして、リリースライブラリとプロファイリングしてください。リリースとデバッグはしばしば大きく異なるパフォーマンスプロファイルを持っています。
他のヒント
プロファイリングは、ランタイム技術です。
あなたはどちらかのライブラリを正常でない実行することができ、最も簡単なオプションは、あなたのテストを実行したり、ライブラリを使用した簡単な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");
}
}
}
}
}