堆分配和合适的硬件
本文关键字:硬件 分配 | 更新日期: 2023-09-27 18:30:29
对于不可避免地在堆上创建大量数据的 C# .net 3.5 应用程序,在硬件方面,我会在内存方面寻找什么?它只是最大的插座总线宽度吗?还是记忆棒的"带宽"?还是它们的实际运行频率?
我们得出的结论是,应用程序的瓶颈是无法避免的,当扩展时,将工作分散到多个线程上,由于许多线程访问 RAM,我们似乎遇到了"冲突"。
实际问题是指锁定项目并有许多线程尝试访问这些项目。无法进一步优化线程锁定。由于这与线程有关,我不确定是否还应该调查替代 CPU 选择并仔细查看 QPI 统计数据?我们目前使用的是Westmere架构,但时钟速度很慢,只有2GHz。
编辑:有人建议DMA可以帮助我们。
我将把它标记为 C# 和 Java,因为我相信答案不会是特定于 C# 的。
提前感谢,
我会在更快的机器上测试应用程序。从听起来,您的内存带宽是瓶颈,所以我会尝试4.5 GHz超频i7和32 GB 1600 MHz内存或类似内存。您可以以大约 1000 美元的价格购买一个。您可能会发现,使用更快的系统,您的瓶颈会移动。
顺便说一句:我怀疑在 C# 中创建对象是可以避免的,尽管它可能无法实现,因为听起来解决这个问题的时间有限。在Java中,我编写了许多高性能服务器,每天GC不到一次,但是您必须客观地编写所有核心代码。类似地,您可以编写一个不锁定代码关键部分的服务,但稍后添加它并不困难。