System.Threading.dll 使 WPF 应用程序在 30 多秒内启动

Posted

技术标签:

【中文标题】System.Threading.dll 使 WPF 应用程序在 30 多秒内启动【英文标题】:System.Threading.dll makes WPF application start in more than 30 seconds 【发布时间】:2015-10-26 12:50:18 【问题描述】:

针对框架 3.5 的“完全空”的 WPF 应用程序项目在 Windows 7 嵌入式 SP1 上启动需要 30 多秒。

在 Windows 7 Enterprise SP1 和 Windows XP 上均未出现此问题。

WPF 项目中唯一的事情是声明/初始化来自 System.Threading.dll 的 ConcurrentQueue:

private static readonly ConcurrentQueue<String> _queue = new ConcurrentQueue<string>(); 

我不得不使用这个 dll,因为 ConcurrentQueue 在 3.5 框架中不存在。

这似乎是系统问题,这可能是两个 ConcurrentQueue 之间的问题吗?我的dll中的一个和Windows 7嵌入式计算机上安装的framework 4.0中的一个?

一些相关信息

System.Threading dll 的版本是 1.0.2856.102

编辑

按照@Sinatr 的建议,我创建了另一个 ConcurrentQueue(使用 ILSpy 复制粘贴 ConcurrentQueue、SystemCollectionsConcurrent_ProducerConsumerCollectionDebugView 和 IProducerConsumerCollection)。

这解决了问题,但我想知道为什么。

【问题讨论】:

@AdrianoRepetti 这就是我的想法,我面临的问题让我怀疑 @AdrianoRepetti 我将在这台计算机上安装 Visual Studio 来检查这一点。 这听起来像是一个 hack:您的项目的目标是 3.5,但您正在添加(通过引用?)包含来自 4.0 的 ConcurrentQueue 的 dll。也许您不应该这样做,而只是自己实现它?见here。 @Sinatr 这是一个很好的观点,但并发是一个非常复杂的问题。我可能不应该尝试自己实现它,我会尝试使用 ILSpy 反编译 System.Threading.dll 并重命名集合。但是知道究竟是什么导致了这个问题会很有趣 【参考方案1】:

您可能需要禁用符号提取。 工具 -> 选项 -> 调试 -> 符号 -> 取消选中Microsoft Symbol Servers

【讨论】:

感谢您的建议,但它已经取消选中(默认可能未选中,因为我不记得曾经更改过)

以上是关于System.Threading.dll 使 WPF 应用程序在 30 多秒内启动的主要内容,如果未能解决你的问题,请参考以下文章

将 /var/www/site1 提供给 www-data:www-data 会使服务器上的所有 WP 站点崩溃

WP Plugin 中的异步 php 代码

微软WP不愧为全球最惨的手机操作系统…

使用 Silverlight 在 WP7 应用程序中显示 GIF

如何将类添加到 wp_nav_menu 中的某些 li 元素

如何自动调整以适应 WP 中悬停文本描述图像中的所有文本