OpenFileDialog/С# slow в любом файле. лучшее решение?

Я открываю файл, используя OpenFileDialog в С#, и я замечаю, что он занимает между 20-40 секундами, чтобы загрузить мой файл и очистить диалог.

Вот мой пример кода:

private void btnOpen_Click(object sender, EventArgs e)
{
    if (ofdSettings.ShowDialog() == DialogResult.OK)
    {
         // do nothing
    } 
}

даже в этом ограниченном примере для очистки диалога требуется 20-40 секунд. файл, который я выбираю, представляет собой xml файл, размер которого составляет всего 1,36kb

Ответы

Ответ 1

У меня была та же проблема, openFileDialog1.ShowDialog() был медленным, и через 10 секунд после его закрытия для выполнения следующей строки моей программы. Я заметил в диалоговом окне, что у меня было несколько старых ярлыков в разделе "Компьютер", указывающих на URL-адрес webdav, которые больше не действительны. Я удалил эти ярлыки из Windows Explorer, и программа работает быстро. Убедитесь, что у вас есть ярлыки подключения к сети, привязанные к вашему компьютеру, которые также отображаются в диалоговом окне (на левой панели в Windows 7). Попробуйте удалить их и посмотреть, будет ли диалог быстрее.

Ответ 2

Еще один вариант, который помог мне в этом случае:

OpenFileDialog ofd = new OpenFileDialog
{
...
   AutoUpgradeEnabled = false
};

С помощью этой опции OpenFileDialog отображает более простой пользовательский интерфейс "pre-Vista" в соответствии с статьей MSDN.

Ответ 3

У меня также была эта проблема, когда я хочу открыть файл example.url с диалогом открытия файла. Это займет 0-10 секунд. Затем я выясню, что это связано с ассоциацией типов файлов (*.url). Когда я изменил связь с веб-браузером по умолчанию на блокнот ++, проблема исчезла. Но я не был решением для меня, потому что когда кто-то нажал на example.url, браузер по умолчанию должен открыть этот файл. Чтобы решить эту проблему, я добавил DereferenceLinks = false.

OpenFileDialog ofd = new OpenFileDialog
{
...
   DereferenceLinks = false
};

Для меня это решение отлично работает

Ответ 4

Вы можете использовать бесплатный инструмент, например ProcExp (SysInternals.com), чтобы отслеживать, что делает ваше приложение во время задержки. Сканирует ли файловая система? Реестр? Сеть (возможно, она пытается подключиться к сетевому ресурсу, который медленно реагирует).

Кстати, вы можете запустить ProcExp.exe без его установки из http://live.sysinternals.com/!