关于大内存分配对.Net运行时的可伸缩性的影响,我遇到了一些奇怪的事情.在我的测试应用程序中,我在一个紧密的循环中创建了许多字符串,持续了固定的循环次数,并吐出了每秒循环迭代的速率.当我在几个线程中运行这个循环时,出现了奇怪的现象 - 看起来速率并没有线性增加.创建大字符串时问题会变得更严重.
让我告诉你结果.我的机器是一个运行Windows Server 2008 R1,32位的8GB 8核盒子.它有两个4核Intel Xeon 1.83ghz(E5320)处理器."工作"进行的是一组交替调用的ToUpper()
,并ToLower()
在一个字符串.我为一个线程,两个线程等运行测试 - 最多.下表中的列是:
第一个例子从一个线程开始,然后是两个线程,最终用八个线程运行测试.每个线程创建10,000个字符串,每个字符串1024个字符:
Creating 10000 strings per thread, 1024 chars each, using up to 8 threads GCMode = Server Rate Linear Rate % Variance Threads -------------------------------------------------------- 322.58 322.58 0.00 % 1 689.66 645.16 -6.90 % 2 882.35 967.74 8.82 % 3 1081.08 1290.32 16.22 % 4 1388.89 1612.90 13.89 % 5 1666.67 1935.48 13.89 % 6 2000.00 …