在 C# .NET 中以 64 位运行应用程序时出现奇怪的问题

问题描述 投票:0回答:2

全部,

我有一个服务器应用程序,它从队列中读取消息并通过调用存储过程将它们写入数据库中。它是用 C# 编写的,面向 .NET Framework 3.5 服务器是XEON 2.4Ghz(16核)

在我的构建属性中,我将平台目标设置为“任何 CPU”。结果是在服务器中,所有核心都以 100% 稳定运行,但应用程序运行缓慢! 我将平台目标更改为 x86,在服务器上运行时运行速度比以前快得多,并且核心负载约为 20-30%。

我无法真正解释发生了什么。

有什么想法吗?

谢谢,

MK

c# 64-bit
2个回答
2
投票

嗯,没有多大意义。但您正在使用一个非常不同的数据库提供商。它们的 64 位版本相对较新,可能没有经过与 32 位版本相同的严格测试和优化。

不过,像这样的程序应该始终阻塞队列读取和数据库写入。 I/O 总是很慢,比原始代码慢得多。只有当线程因 I/O 请求而阻塞时,它才会使用少于 100% 的 CPU 周期。

确保它不会频繁抛出和捕获异常。这是昂贵的并且很容易耗尽所有 CPU 资源。在输出窗口中调试时可见。


2
投票

MS 人 Rick Byers 的这篇博文谈到了这一点:任何 CPU Exes 通常带来的麻烦都超过了它们的价值

博客中的一句话是:无论如何,32 位往往更快,这可能是答案的一部分。

编辑:添加了一些我忘记的答案,正如汉斯·帕桑特指出的那样。

© www.soinside.com 2019 - 2024. All rights reserved.