РЕДАКТИРОВАТЬ 1
Я не исключаю, что это может быть вызвано чем-то очень основным побочным эффектом использования Profiler (некоторые неправильные настройки в моем "обычном" проекте)
Я хотел улучшить время вычислений в своем приложении, поэтому решил провести тщательный анализ профилирования.
Итак, Я только что запустил профилирование распределения памяти .Net для анализа своего приложения.
Я был совершенно ошеломлен, наблюдая, как вычисления идут в 20 раз быстрее !
Приложение состоит из чтения данных из двоичных файлов с помощью BackgroundWorkers, их обработки,
и сохранения результатов в базе данных MSSQL. Каждый раунд обычно занимает 20 секунд, а при профилировании - 1 секунда. Я проверил и убедился, что результаты согласованы в обоих случаях.
Экспериментальный друг .Net сказал мне, что профилировщик оптимизирует многопоточность и «каким-то образом» находит свой путь через блокировки и узкие места, но я просто не могу в это поверить.
Итак, мои вопросы:
- ЧТО ТОЛЬКО ПРОИСХОДИТ, КАК И ПОЧЕМУ?
- Как заставить мой код так себя вести?
РЕДАКТИРОВАТЬ 2
Я ЗНАЮ это звучит безумно и невероятно. Я сам по-прежнему очень подозрительно. Но это ИСТИНА.
ЖЕ код работает очень быстро, когда запускается профилировщиком.
Я использую одни и те же тестовые данные и наблюдаю за теми же компьютерными данными.
Я не могу выдать простой репродуцируемый проект, так как это относительно большая структура.
Я использую Visual Studio 2010 Profiler.
Я дам как можно больше подробностей о потоке и обязательно опубликую подсказку, как только найду.
Обычные журналы запуска:
23.03.2011 18:04:34 | 180434,621 | МОДЕЛИРУЮЩИЙ КОМПЛЕКТ [5] - [1] - [5 PC-1 0 [SET 1/48]
23.03.2011 18:05:01 | 180501.271 | ВРЕМЯ ОБРАБОТКИ: 00: 00: 26.6515244
и т.д ..
Журналы запуска профилировщика:
24.03.2011 11:38:15 | 113815,592 | МОДЕЛИРУЮЩИЙ КОМПЛЕКТ [5] - [1] - [5 PC-1 0 [SET 1/48]
24.03.2011 11:38:17 | 113817,350 | ВРЕМЯ ОБРАБОТКИ: 00: 00: 01.7581005
и т.д ..
РЕДАКТИРОВАТЬ 3: Подсказка
Ok ok ok Мой BAD (я предупреждал о такой возможности при редактировании 1, поскольку это было слишком невероятно. Извините) @Watts предложил проверить, был ли я в режиме отладки или выпуска.
Что я уже сделал. НО @SnowBear указал, что есть две разные вещи: запустить отладочную версию программного обеспечения и запустить программное обеспечение под отладчиком
Я удостоверился, что активная конфигурация была RELEASE и в Build, и в исполнении VS2010. Однако, поскольку я только сходил с ума, я решил запустить Приложение непосредственно из exe-файла в bin / release. И вуаля ... процессы занимали 1 секунду каждый.
Запуск Profiler выведет вас из режима отладки (будь вы в режиме выпуска или в режиме отладки)
это то, что привело меня в замешательство.
Спасибо, что все дело закрыто.