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不要这高啊,谢谢了

解决方案 »

  1.   

    最好使用Application.DoEvents();这样可以做到响应其它的操作,
    但是你使用Sleep(2000)那么程序无论如何每次循环也要停下来两秒了.private static Main()
    {
         for(int i=0;i<x;i++)
         {
             Application.DoEvent();//Thread.Sleep(2000);
             strings[i] = i.ToString();
         }
    }
      

  2.   

    CPU100%没有关系,只要能及时的响应其它的操作就可以了.所以使用DoEvents()方法是最合适的.
      

  3.   

    不要用异步,另外产生一个线程来作为worker线程,主线程留作UI线程
      

  4.   

    其实Sleep(2000)是故意这样写的,做在线程池里的Sleep(2000)我觉得和异步网络延迟差不多样,呵呵,想模拟网络延迟。
    其实真实的问题是要在应用程序c#里写XMLHTTP的异步请求,但是程序写了CPU太高了,郁闷啊,能怎么优化代码吗
      

  5.   

    hailongchang(什么时候才能看到星星啊) (
    -----------------------------------------------------------
    你说的方法我也试过,CPU也一样的高啊,100%,当X的循环超过200后,后面就一直100%了
      

  6.   

    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();
         }
    }
      

  7.   

    Qim(莫名-想星星) 
    Thread.Sleep(100);//其实改的小一点也不错.2秒太长了.
    =------------------------------------------------------------
    这个程序就是要模拟延迟有2S的呀
      

  8.   

    终于明白怎么回事了,,线程要去抢CPU时间,在每个线程后还是要释放或休眠下下就可以降低CPU了,当然这样时间稍稍长点,呵呵,效率和时间果然要成反比的
      

  9.   

    对,在线程里面最好是加个
    Thread.Sleep(100);
    这样CPU就不会是100%了.