OpenFileDialog / c#在任何文件上都很慢。 更好的解决方

我在c#中使用OpenFileDialog打开一个文件,我注意到加载文件并清除对话框需要20-40秒。

这是我的示例代码:

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

即使有这个有限的例子,对话框也需要20-40秒的持续时间才能清除。 我正在选择的文件是一个只有1.36kb大的xml文件

我有同样的问题,openFileDialog1.ShowDialog()很慢,关闭它后需要10秒才能执行我的程序的下一行。 我在对话框中注意到我在“计算机”下面有几个旧的快捷方式指向webdav url,这些快捷方式不再有效。 我从Windows资源管理器中删除了这些快捷方式,现在程序很快。 检查是否有与计算机绑定的任何网络连接快捷方式,这些快捷方式也显示在对话框中(在Windows 7的左侧面板中)。 尝试删除它们,看看对话框是否更快。

在我的案例中有另一个选择:

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

根据MSDN文章 ,使用此选项,OpenFileDialog呈现更简单的UI,“pre-Vista”风格。

当我想打开带有文件打开对话框的example.url文件时,我也遇到了这个问题。 这需要0-10秒。 然后我发现这与文件类型关联有一些共同点(* .url)当我将关联从默认Web浏览器更改为记事本++时,问题就消失了。 但我这对我来说没有解决方案,因为当有人点击example.url时,默认浏览器应该打开这个文件。 为了解决这个问题,我添加了DereferenceLinks = false

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

对我来说这个解决方案很完美

您可以使用免费工具(如ProcExpSysInternals.com ))来监控应用程序在延迟期间执行的操作。 它是在扫描文件系统吗? 注册表? 网络(可能是它尝试连接到响应缓慢的网络共享)。

顺便说一句,你可以运行ProcExp.exe而无需从http://live.sysinternals.com/安装它!