C# .Net多线程应用程序在功能强大的服务器上运行速度比普通服务器慢

C# .Net多线程应用程序在功能强大的服务器上运行速度比普通服务器慢,c#,.net,multithreading,performance,C#,.net,Multithreading,Performance,我有以下两种服务器配置: 服务器1: 处理器Intel(R)Xeon(R)CPU E5-4617 0@2.90GHz,2900 Mhz,6核,6逻辑处理器 处理器Intel(R)Xeon(R)CPU E5-4617 0@2.90GHz,2900 Mhz,6核,6逻辑处理器 处理器Intel(R)Xeon(R)CPU E5-4617 0@2.90GHz,2900 Mhz,6核,6逻辑处理器 处理器Intel(R)Xeon(R)CPU E5-4617 0@2.90GHz,2900 Mhz,6核,6逻

我有以下两种服务器配置:

服务器1:

处理器Intel(R)Xeon(R)CPU E5-4617 0@2.90GHz,2900 Mhz,6核,6逻辑处理器 处理器Intel(R)Xeon(R)CPU E5-4617 0@2.90GHz,2900 Mhz,6核,6逻辑处理器 处理器Intel(R)Xeon(R)CPU E5-4617 0@2.90GHz,2900 Mhz,6核,6逻辑处理器 处理器Intel(R)Xeon(R)CPU E5-4617 0@2.90GHz,2900 Mhz,6核,6逻辑处理器

操作系统名称Microsoft Windows Server 2012标准

物理内存128 GB

服务器2:

处理器Intel(R)Xeon(R)CPU X5650@2.67GHz,2659 Mhz,4核,4逻辑处理器

操作系统名称Microsoft Windows Server 2008 R2企业版

物理内存24 GB

我的应用程序使用任务API来并行化父组件和子组件,父类任务/线程将调用子类对象,子类对象再次使用任务API并行化模块

最初我在server2上运行,并获得了比不运行任务的应用程序更好的性能结果,现在理论上我的期望是,当Server1出现时,应该有一些性能增强,因为子组件至少有20-30个并行运行的任务,但令我完全惊讶的是,它已经恶化了3-4倍,因此如果早期单次执行子组件需要2秒,那么现在需要7-8秒,这对我们来说是一场灾难,因为子组件可能会被调用数百万次,我不确定如何解决问题,特别是因为Server1被认为是产品。任何能让我开始解决这个问题的建议都会很好

如果您需要更多详细信息/澄清,请告诉我

谢谢


Mrinal

您的问题有点含糊不清,尤其是因为我们没有代码可供使用,也没有任何框架概念。但我能想到一些可能导致你的问题的一般性因素。首先,仅仅因为您添加了更多内核并不意味着您将获得更好的处理,事实上,根据代码的编写方式,您可能会得到与您看到的完全相反的结果。我的主要怀疑是,您的所有任务都在使用一些共同的对象,这些对象最终会导致任务之间的冲突,从而导致瓶颈。所以我的第一个问题是任务之间是否有共享资源?基本上,您正在生成单个工作单元的任务是什么(即任务之间没有共享的依赖项)?另一个显示瓶颈的警告标志是CPU使用率。从理论上讲,如果您有许多独立的工作单元,它们彼此独立,那么您将消耗大量的CPU,因为.Net将能够并行运行它们。如果您有很多任务,但CPU使用率较低,则更有可能是某个共享对象正在扼杀您的并行化

请至少使用.NET探查器获取应用程序运行时特征的基础数据。谢谢Lex,我会找出哪些性能分析器工具可以帮助我们更好地理解这个问题,您是否推荐任何免费工具,这比其他建议的工具更直观,因为我的问题很模糊,所以,将此标记为答案,因为我仔细查看了代码和不必要的锁,在不修改任何共享数据结构的情况下,它们会额外小心以避免同步问题,从而降低应用程序的性能。我无法发布代码,因为这是一个大项目的一部分,我无法花费时间重新编写一个更简单的版本来重现这个问题,我只是在寻找可以帮助我在黑暗中拍摄的通用答案:)。