рассчитать время выполнения метода в Visual Studio Express (профилировщик недоступен)? - PullRequest
4 голосов
/ 30 ноября 2010

Я использую Visual Studio Express Edition, и у него нет профилировщика или анализатора кода.

Код с двумя делегатами, выполняющими одну и ту же задачу: один с использованием анонимного метода и один с помощью лямбда-выражения Я хочу сравнить, какой из них занимает меньше времени.

Как я могу сделать это в VS Express? (не только для делегата, но и для методов)

Если это дубликат, пожалуйста, свяжите его.

Спасибо

Я пытался так:

        /** Start Date time**/
        DateTime startTime = DateTime.Now;
        /********do the square of a number by using LAMBDA EXPRESSIONS********/
        returnSqr myDel = x => x * x;
        Console.WriteLine("By Lambda Expression Square of {0} is: {1}", a,myDel(a));
        /** Stop Date time**/
        DateTime stopTime = DateTime.Now;
        TimeSpan duration = stopTime - startTime;
        Console.WriteLine("Execution time 1:" + duration.Milliseconds);



        /** Start Date time**/            
        DateTime startTime2 = DateTime.Now;
        /*****do the square of a number by using ANONYMOUS EXPRESSIONS********/
        returnSqr myDel1 = delegate(int x) { return x * x;};
        Console.WriteLine("By Anonymous Method Square of  {0} is: {1}", a, myDel1(a));
        /** Stop Date time**/
        DateTime stopTime2 = DateTime.Now;
        TimeSpan duration2 = stopTime2 - startTime2;
        Console.WriteLine("Execution Time 2:" + duration.Milliseconds);

Вывод дает:

Время исполнения 1: 0
Время исполнения 2: 0


Почему так?

Ответы [ 5 ]

15 голосов
/ 30 ноября 2010

Вы можете использовать класс секундомера.

Stopwatch sw = Stopwatch.StartNew();
// rest of the code
sw.Stop();
Console.WriteLine("Total time (ms): {0}", (long) sw.ElapsedMilliseconds);
4 голосов
/ 30 ноября 2010

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

Это не идеальное решение, но помогает

0 голосов
/ 30 ноября 2010

Скорее всего, ваш код выполняется быстрее, чем максимальное разрешение вашего устройства синхронизации. Вот почему он сообщает "0" миллисекунд как время выполнения для обоих фрагментов кода: количество времени, котороепрошло не обнаружено.Для некоторых людей этого может быть достаточно, чтобы сделать вывод, что, вероятно, не имеет значения, каким образом вы это делаете.

Однако, если важно получить точное сравнение скорости каждого метода, вы можете попробовать запуститькод в узком цикле. По сути, делай кем бы ты ни был делаешь около 100 или 1000 или даже миллион раз подряд, сколько бы это ни потребовалосьдостаточное количество времени, которое будет зарегистрировано на вашем устройстве хронометража.Очевидно, что это не займет столько времени, чтобы запустить процедуру один или несколько раз в вашем конечном коде, но, по крайней мере, это даст вам представление о относительной скорости каждой опции.

0 голосов
/ 30 ноября 2010

Просто использование класса секундомера должно сработать.

0 голосов
/ 30 ноября 2010

Вы можете рассмотреть возможность использования класса Scenario , который поддерживает простое использование начала / конца, с необязательной регистрацией через ETW.

Из их вики:

Youможно использовать класс Scenario для добавления инструментария производительности в приложение (.NET или собственный C ++).Кратчайшее описание сценария - «именованный секундомер, который может регистрировать, когда вы запускаете и останавливаете его».

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