程序运行CPU占用太高(求助)
private static int x;
private static string[] strings = new string[x];
private static Main()
{
for(int i=0;i <x;i++)
{
Thread.Sleep(2000);
strings[i] = i.ToString();
}
}
如上,如果用同步把运行以上函数,再把数组string[x]读出来的话,需要的时间至少是2S*X,太久了。
我在这里,用线程做的添加数组数据,用异步输出,主要代码如下
MyDelegate dn = new MyDelegate(test);//定义好的委托,test为定义好的输出函数
AsyncCallback acb = new AsyncCallback(CallBackMethod);
IAsyncResult iar = dn.BeginInvoke(i, acb, dn);
private void CallBackMethod(IAsyncResult ar)
{
if (ar.IsCompleted)
{
MyDelegate dn = (MyDelegate)ar.AsyncState;
string r = dn.EndInvoke(ar);
}
}
这样的话,速度提高了,但是当X比较大的时候,CPU占用率一直是100%
那位高手帮我看看,按照这个思路,写几个代码让CPU不要这高啊,谢谢了
------解决方案--------------------最好使用Application.DoEvents();这样可以做到响应其它的操作,
但是你使用Sleep(2000)那么程序无论如何每次循环也要停下来两秒了.
private static Main()
{
for(int i=0;i <x;i++)
{
Application.DoEvent();//Thread.Sleep(2000);
strings[i] = i.ToString();
}
}
------解决方案--------------------CPU100%没有关系,只要能及时的响应其它的操作就可以了.
所以使用DoEvents()方法是最合适的.
------解决方案--------------------要速度,CPU就得高
这两者有冲突的,CPU低就需要慢点或者改进算法
呵呵,帮顶下
------解决方案--------------------不要用异步,另外产生一个线程来作为worker线程,主线程留作UI线程
------解决方案--------------------private static int x;
private static string[] strings = new string[x];
private static Main()
{
for(int i=0;i <x;i++)
{
Thread.Sleep(100);//其实改的小一点也不错.2秒太长了.
strings[i] = i.ToString();
}
}