Я ожидаю, что myApp.exe работает быстрее, чем myApp.vshost.exe, но - PullRequest
2 голосов
/ 22 сентября 2011

из vshost (запуск в версии VS)

 array pure 00:00:02.9634819
 1200000000
 Basic: 00:00:04.1682663

из отдельной программы (скомпилированный выпуск)

 array pure 00:00:09.1783278 // slower, why?
 1200000000
 Basic: 00:00:00.5985118  // faster, as expected

Так что кажется, что запуск из VS иногда ускоряет работу программ?

Мой тестовый код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace vsHostTest
{
    class Program
    {
        static long Five(int s0, int s1, int s2, int s3, int s4)
        {
            return s4 + 100 * s3 + 10000 * s2 + 1000000 * s1 + 100000000 * s0;
        }

        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            long testSize = 10000000;
            int[] myarray = new int[] { 1, 2, 3 };
            watch.Start();
            for (int j = 0; j < testSize; j++)
            {

                bool i = myarray.Contains(2);

            }
            watch.Stop();
            Console.WriteLine("array pure {0}", watch.Elapsed);

            testSize = 200000000;
            long checksum = 0;
            watch.Restart();
            for (long i = 0; i < testSize; i++)
            {
                long ret = Five(1, 2, 3, 4, 5);
                checksum += ret % 9;
            }
            watch.Stop();
            Console.WriteLine(checksum);
            Console.WriteLine("Basic: {0}", watch.Elapsed);
            Console.ReadKey();
        }
    }
}

1 Ответ

3 голосов
/ 22 сентября 2011

Я бегал каждый четыре раза, но не включая первый результат для каждого среднего.

vshost:

чистый массив: 6,83 Базовый: 3,62

консоль:

Чистый массив: 6,64 Базовый: 1,57

Я должен добавить, что все время в vshost было медленнее, чем в консоли. Я не уверен, почему вы получаете результаты, которые есть, но vshost подключает отладчик к процессу, а запуск через консоль - нет. Из-за этого консольная версия всегда будет быстрее.

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

Кроме того, и я чувствую себя глупо, спрашивая об этом, вы уверены, что запускали версию выпуска, когда работали через консоль? Я уверен, что вы сделали, но я всегда спрашиваю, так как иногда я делаю глупые ошибки, как это.

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