日期:2014-05-19  浏览次数:20948 次

程序运行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();
}
}