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