_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%的,是不是内存速度跟不上,还是什么原因,请各位大神指点一下!
如果只是做测试,long i++这样的最合适了
你那个代码很容易触发gc,越到后面越坑,而gc的时候你线程会暂停,这样导致你cpu使用率上不来。
我也觉得是 垃圾回收若的祸。。。。那如何决解???望大侠提供点思路!
@☆绿茶☆: 没太好办法,你又想马儿跑的快又想马儿不吃草这个不太现实。
只是针对你的代码逻辑而言,你非要这样撸的话有两条路
1.预先分配好list大小,避免后续add操作的扩容
2.不使用托管内存,自己Marshal.AllocHGlobal到非托管内存中,然后自己控制对象的序列化和反序列化(写入非托管内存及读取),最后free一下。