Как узнать, что является причиной ввода / вывода в моем приложении?
Добрый день,
Я унаследовал некоторый код 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). Также следите за списком файлов, которые появляются.