Как узнать, что является причиной ввода / вывода в моем приложении?

Добрый день,

Я унаследовал некоторый код C# от лет назад. Я немного переработал его, чтобы он был асинхронным. Оценивая влияние моих изменений на производительность процессора, я использовал Process Explorer, чтобы примерно посмотреть, что делает мое приложение. К моему удивлению, он, кажется, делает то, что Process Explorer сообщает как I/O. В общем, это связано с дисковым вводом-выводом или сетевым вводом-выводом. Основываясь на том, что я вижу в коде, я не могу понять явный вызов любого из этих двух источников ввода-вывода.

Мой вопрос: каков наилучший способ определить, какой раздел кода вызывает ввод / вывод? Мы используем dotTrace из JetBrains для профилирования нашего приложения, но, насколько я могу судить, оно обрабатывает только производительность процессора и памяти.

Заранее спасибо за любые указатели.

С Уважением,

Эрик.

4 ответа

Решение

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

Как я могу профилировать файл ввода / вывода?

Основываясь на этом ответе, вы можете найти в своем решении имя файла для всех часто читаемых или записанных файлов, найденных с помощью Process Monitor.

Метод Stackshot, также называемый случайной паузой, найдет его, если это займет значительное время.

Если код ввода / вывода управляется, вы можете загрузить символы для.net framework и установить точки останова в важных функциях (например, FileStream конструкторы и т. д.)

Это включает в себя некоторые догадки, но может быть информативным, если вам это удастся

В дополнение к Process Monitor я нахожу Resource Monitor на Win7 (также доступный в разделе "Производительность и надежность", я думаю, на Vista) очень полезным для диагностики замедлений, связанных с вводом / выводом. Переключитесь в режим просмотра диска и выполните сортировку по "Чтение / запись" или "Всего" (только для win7). Также следите за списком файлов, которые появляются.

Другие вопросы по тегам