2000ms跑得慢得多

时间:2017-10-24 10:30:18

标签: performance optimization task

       private void SetState(int i)
    {






        var task = Task.Factory.StartNew(() =>
           {
               Stopwatch sw = new Stopwatch();
               sw.Start();

               if (getCannonState(i) == 0)
                   state = 0;                      
                if (getCannonState(i) == 1)                      
                        state = 1;
                if (getCannonState(i) == 2)                      
                        state = 2;                   
                if (getCannonState(i) == 3)                       
                        state = 3;
             if (getCannonState(i) == 4)
            state = 4;

               sw.Stop();
               Console.WriteLine("Set state of cannon " + i + " took {0} milliseconds", sw.ElapsedMilliseconds.ToString());


           });



    }

Herer是我的代码。 get cannonstate获取屏幕截图并检查像素。如何运行getcannon状态运行在397ms。但运行setstate需要2000毫秒。为什么这么慢?我需要它从getcannonstate获取recive信息并快速设置状态。

我一直在尝试使用任务,但没有运气。

2 个答案:

答案 0 :(得分:2)

脚本需要这么长时间,因为你调用了5次getCannonState ...将结果分配给变量来修复问题并只调用一次getCannonState;)

private void SetState(int i) {
  var task = Task.Factory.StartNew(() => {
    Stopwatch sw = new Stopwatch();
    sw.Start();
    var state = getCannonState(i);

    sw.Stop();
    Console.WriteLine("Set state of cannon " + i + " took {0} milliseconds", sw.ElapsedMilliseconds.ToString());

  });
}

答案 1 :(得分:0)

您正在呼叫getCannonState(i) 5次。您应该将其保存在本地变量中并检查:

var checkState = getCannonState(i);
if (checkState == 0) 
   ...

但是查看您的代码,甚至可以将值直接分配给state

state = getCannonState(i);