首页 新闻 会员 周边

如何提高多核cpu利用率!

0
悬赏园豆:30 [待解决问题]

_t = new Thread(ceshi);
_t.IsBackground = true;
_t.Start();

private void ceshi()
{
Stopwatch stw1 = new Stopwatch();
stw1.Start();

Task[] tasks = new Task[int.Parse(txt_tcount.Text)];
int cy = int.Parse(txt_caiyang.Text);
for (int i = 0; i < tasks.Length; i++)
{
Task t1 = Task.Factory.StartNew(delegate { ceshi2(cy); });
tasks[i] = t1;
}

Task.WaitAll(tasks);//阻塞

stw1.Stop();
log(" 用时:" + stw1.ElapsedMilliseconds.ToString());
}

private void ceshi2(int cy)
{
List<Product> l = new List<Product>();
while (_count < cy)
{
_count++;
Product p = new Product();
p.Name = _count.ToString();
l.Add(p);
}
}

class Product
{
public string Name { get; set; }
public string Category { get; set; }
public int SellPrice { get; set; }
}

 

这段程序4核cpu运行,怎么添加线程都是占用 60%以下,如何 提高到 100%利用率。

发现如果不添加数据,只是简单的运算,是可以到100%的,是不是内存速度跟不上,还是什么原因,请各位大神指点一下!

☆绿茶☆的主页 ☆绿茶☆ | 初学一级 | 园豆:76
提问于:2017-03-07 10:12
< >
分享
所有回答(1)
0

如果只是做测试,long i++这样的最合适了

你那个代码很容易触发gc,越到后面越坑,而gc的时候你线程会暂停,这样导致你cpu使用率上不来。

 

Daniel Cai | 园豆:10424 (专家六级) | 2017-03-07 18:34

我也觉得是 垃圾回收若的祸。。。。那如何决解???望大侠提供点思路!

支持(0) 反对(0) ☆绿茶☆ | 园豆:76 (初学一级) | 2017-03-07 19:28

@☆绿茶☆: 没太好办法,你又想马儿跑的快又想马儿不吃草这个不太现实。

只是针对你的代码逻辑而言,你非要这样撸的话有两条路

1.预先分配好list大小,避免后续add操作的扩容

2.不使用托管内存,自己Marshal.AllocHGlobal到非托管内存中,然后自己控制对象的序列化和反序列化(写入非托管内存及读取),最后free一下。

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2017-03-08 10:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册