小编use*_*682的帖子

为什么我的线程.Net应用程序在分配大量内存时不会线性扩展?

关于大内存分配对.Net运行时的可伸缩性的影响,我遇到了一些奇怪的事情.在我的测试应用程序中,我在一个紧密的循环中创建了许多字符串,持续了固定的循环次数,并吐出了每秒循环迭代的速率.当我在几个线程中运行这个循环时,出现了奇怪的现象 - 看起来速率并没有线性增加.创建大字符串时问题会变得更严重.

让我告诉你结果.我的机器是一个运行Windows Server 2008 R1,32位的8GB 8核盒子.它有两个4核Intel Xeon 1.83ghz(E5320)处理器."工作"进行的是一组交替调用的ToUpper(),并ToLower()在一个字符串.我为一个线程,两个线程等运行测试 - 最多.下表中的列是:

  • 速率:所有线程的循环数除以持续时间.
  • 线性速率:如果性能线性扩展的理想速率.它计算为一个线程所获得的速率乘以该测试的线程数.
  • 方差: 计算为速率低于线性速率的百分比.

示例1:10,000个循环,8个线程,每个字符串1024个字符

第一个例子从一个线程开始,然后是两个线程,最终用八个线程运行测试.每个线程创建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 …

.net memory concurrency multithreading scalability

7
推荐指数
1
解决办法
716
查看次数

标签 统计

.net ×1

concurrency ×1

memory ×1

multithreading ×1

scalability ×1