OpenFileDialog / c# замедляет работу с любым файлом. лучшее решение?
Я открываю файл с помощью OpenFileDialog в c#, и я замечаю, что это занимает от 20 до 40 секунд, чтобы загрузить мой файл и очистить диалоговое окно.
Вот мой пример кода:
private void btnOpen_Click(object sender, EventArgs e)
{
if (ofdSettings.ShowDialog() == DialogResult.OK)
{
// do nothing
}
}
Даже в этом ограниченном примере требуется 20-40 секунд, чтобы диалог очистился. файл, который я выбираю, представляет собой xml-файл размером всего 1,36 КБ
4 ответа:
У меня была та же проблема, openFileDialog1.ShowDialog() был медленным, потребовалось 10 секунд после закрытия, чтобы выполнить следующую строку моей программы. Я заметил в диалоге, что у меня была пара старых ярлыков под "компьютером", указывающих на url webdav, которые больше не действительны. Я удалил эти ярлыки из Проводника windows, и теперь программа работает быстро. Проверьте, есть ли у вас ярлыки сетевых подключений, привязанные к компьютеру, которые также отображаются в диалоговом окне (на левой панели в Windows 7). Попробуйте удалить их и посмотреть, будет ли диалог быстрее.
Еще один вариант, который помог в моем случае:
OpenFileDialog ofd = new OpenFileDialog { ... AutoUpgradeEnabled = false };
С этой опцией OpenFileDialog отображает более простой пользовательский интерфейс, стиль "pre-Vista" в соответствии со статьей MSDN.
У меня также была эта проблема, когда я хотел открыть пример.url-адрес файла с диалогом открытия файла. Это занимает 0-10 секунд. Затем я узнаю, что это имеет что-то todo с Ассоциацией типов файлов (*.url) когда я изменил ассоциацию с веб-браузером по умолчанию на notepad++, проблема исчезла. Но для меня это не было решением, потому что когда кто-то нажимал на пример.url, браузер по умолчанию должен открыть этот файл. Чтобы решить эту проблему, я добавил
DereferenceLinks = false
.OpenFileDialog ofd = new OpenFileDialog { ... DereferenceLinks = false };
Для меня это решение работает прекрасное
Вы можете использовать бесплатный инструмент, такой как ProcExp (SysInternals.com) чтобы отслеживать, что делает ваше приложение во время задержки. Это сканирование файловой системы? В регистратуре? Сеть (возможно, он пытается подключиться к сетевому ресурсу, который медленно реагирует).
Кстати, вы можете запустить ProcExp.exe без установки из http://live.sysinternals.com/!