Как профилировать одно библиотечное решение с помощью инструмента (ов) Visual Studio 2008 Profiler? - PullRequest
3 голосов
/ 25 февраля 2009

Я прочитал и практиковал Руководство по профилированию MSDN . Но я не смог найти способ профилировать решение для библиотеки (кнопка «Запуск с профилированием» для библиотек отключена).

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

Кто-нибудь может указать мне правильное направление?

Ответы [ 5 ]

4 голосов
/ 03 марта 2009

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

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

nunit-console myassembly.dll /include:Profile

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

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

Кроме того, просто отметьте, что вы должны профилировать с библиотеками Release. Release и Debug часто имеют МНОГО разных профилей производительности.

0 голосов
/ 08 января 2010

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

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

    }
}
0 голосов
/ 06 марта 2009

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

0 голосов
/ 03 марта 2009

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

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

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

0 голосов
/ 03 марта 2009

Профилирование - это метод выполнения, поэтому, если я правильно понимаю, вам нужно запустить ваше программное обеспечение, чтобы вы могли время выполнения профилировать его.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...