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 14

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/!