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 站点崩溃
使用 Silverlight 在 WP7 应用程序中显示 GIF