2009-02-25 5 views
3

Я читал и практиковал MSDN's Profiler Tutorial. Но я не мог найти способ профилировать библиотечное решение (кнопка «Запуск с профилированием» отключена для библиотек).Как профилировать одно библиотечное решение с помощью Visual Studio 2008 Profiler Tool (s)?

  1. Единственным решением, о котором я мог думать, является создание исполняемого проекта только для целей профилирования.
  2. Я уже написал модульные тесты для своей библиотеки, используя тестовую структуру Visual Studio Team System, поэтому я предполагаю, что могу использовать их для профиля, как это делает Рик Минерих с NUnit.

Любой может указать мне правильное направление?

ответ

4

Можно профилировать, используя ваши тесты. Вы просто запускаете профилировщик на все, что запускает тесты, и указывайте свои сборные сборки в качестве целей профилирования. Однако, не зная точно, какую инфраструктуру вы используете для тестирования и профилирования, практически невозможно указать вам на решение.

Поскольку я использую NUnit, я буду использовать его в качестве примера. Вы можете создать тестовую категорию и называть ее профайлами. Затем вы можете запустить nunit.exe из профилировщика с в/включить параметр командной строки, чтобы указать эти тесты:

nunit-console myassembly.dll /include:Profile 

Вы можете использовать мастер Performance Analyize->, чтобы сделать это. Путь dll будет вашей сборкой, а исполняемый путь будет командной строкой nunit-console, как указано выше.

Я также знаю, что ReSharper adds extensions to Visual Studio to do this for you. С его помощью вы можете просто щелкнуть правой кнопкой мыши по тесту и выбрать «Профиль TESTNAME». Хотя это и стоит денег, я думаю, что есть оценочная версия, которую вы могли бы проверить.

Также как примечание, обязательно профиль с библиотеками выпусков. У выпуска и отладки часто есть много разных профилей производительности.

+0

Я использую Visual Studio Team Studio Test Framework или MSTest как некоторые люди называют это. Вот в чем причина моего вопроса: если NUnit имеет способ сделать это, почему MSTest этого не делает, или если он есть, где его найти? –

+0

Если вы понимаете, как работает MSTest, вы поймете, почему ваш ответ не удовлетворяет меня полностью. MSTest генерирует несколько папок, по одному на каждый раз, когда я запускаю тест, поэтому я не могу автоматизировать процесс профилирования. –

+0

Итак, используя MSTest, вы можете сделать почти то, что я указал. Просто замените вызов NUnit-консоль с MSTest.exe/тест: [АСМАП] смотрите документацию MSDN по MSTest.exe для получения более подробной информации об использовании: http://msdn.microsoft.com/en-us /library/ms182489(VS.80).aspx –

0

Профилирование представляет собой метод выполнения, так что если я хорошо понимаю, что вы должны перспективе свое программное обеспечение, так что вы можете выполнения профиль его.

Вы не можете нормально запускать библиотеку, самый простой вариант - запустить ваши тесты или создать простой exe, который использует библиотеку. Вы можете использовать только DLL, чтобы профиль был только там, где вы хотите.

0

Это не имеет большого смысла. Профайлер Visual Studio не выполняет статический анализ вашего кода, чтобы сообщить, как быстро он работает. Он позволяет запускать его и вводит код или принимает образцы кода, который выполняется, когда оценивается, сколько времени занимает каждый раздел кода.

Учитывая это, как вы предлагаете профиль вашей библиотеки? Как Visual Studio знает о ваших тестах и ​​какие из них вы хотите использовать для профилирования?

Ответ: вы делаете исполняемый файл и вызываете те тесты, и так оно и есть.

0

По умолчанию все проекты должны иметь программный тест. Это более простой режим для осуществления кода. Теперь вы должны думать о том, чтобы охватить все возможности записей. Он также будет использовать инструменты охвата.

0

На самом деле вы можете добавить в список Целей (щелкните правой кнопкой мыши Цели) любой исполняемый файл.

Текст 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"); 
       } 
      } 
     } 

    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^