对于C#.net 3.5应用程序,它不可避免地在堆上创建了大量数据,就硬件而言,我将在内存方面寻找什么?它只是最大的插座总线宽度吗?还是记忆棒的“带宽”?或者它们运行的实际频率?
我们已经得出结论,我们的应用程序的瓶颈是无法避免的,当扩展时,将工作分散到多个线程上,由于许多线程访问RAM,我们似乎会遇到“冲突”。
实际问题是指锁定项目并且有许多线程试图访问这些项目。没有办法进一步优化线程锁定。由于这与线程有关,我不确定是否还应该调查其他CPU选择并仔细查看QPI统计信息?我们目前正在使用Westmere架构,但时钟速度慢,为2GHz。
编辑:有人建议DMA可以帮助我们。
我打算将其标记为C#和Java,因为我相信答案不会是C#特定的。
提前致谢,
答案 0 :(得分:1)
我会在更快的机器上测试应用程序。从它的声音来看,你的内存带宽是瓶颈,所以我会尝试使用带有32 GB 1600 MHz内存或类似功能的4.5 GHz超频时钟i7。你可以花1000美元买一个。您可能会发现,使用更快的系统,您的瓶颈会移动。
BTW:我怀疑在C#中创建对象是可以避免的,虽然它可能无法实现,因为它听起来有限的时间来解决这个问题。在Java中,我编写了许多高性能服务器,GC每天不到一次,但你必须用目标编写所有核心代码。类似地,您可以编写一个不会锁定代码的关键部分的服务,但是稍后只需添加它即可。