【发布时间】: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 并重命名集合。但是知道究竟是什么导致了这个问题会很有趣
标签: c# .net-4.0 .net-3.5 windows-embedded concurrent-queue