首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

程序运行CPU占用太高()

2012-01-10 
程序运行CPU占用太高(求助) privatestaticintxprivatestaticstring[]stringsnewstring[x]privatestatic

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

热点排行