OpenFileDialog / c # медленный на любом файле. лучшее решение? - PullRequest
15 голосов
/ 19 июля 2011

Я открываю файл с помощью 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 ]

26 голосов
/ 11 ноября 2011

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

7 голосов
/ 14 марта 2015

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

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

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

2 голосов
/ 03 сентября 2012

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

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

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

0 голосов
/ 19 июля 2011

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

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

...