9 使用记秒表检查程序运行时间
  如果你担忧某些代码非常耗费时间,可以用StopWatch来检查这段代码消耗的时间,如下面的代码所示
  System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
  timer.Start();
  Decimal total = 0;
  int limit = 1000000;
  for (int i = 0; i < limit; ++i)
  {
  total = total + (Decimal)Math.Sqrt(i);
  }
  timer.Stop();
  Console.WriteLine(“Sum of sqrts: {0}”,total);
  Console.WriteLine(“Elapsed milliseconds: {0}”,
  timer.ElapsedMilliseconds);
  Console.WriteLine(“Elapsed time: {0}”, timer.Elapsed);
  现在已经有专门的工具来检测程序的运行时间,可以细化到每个方法,比如dotNetPerformance软件。
  以上面的代码为例子,您需要直接修改源代码,如果是用来测试程序,则有些不方便。请参考下面的例子。
  class AutoStopwatch : System.Diagnostics.Stopwatch, IDisposable
  {
  public AutoStopwatch()
  {
  Start();
  }
  public void Dispose()
  {
  Stop();
  Console.WriteLine(“Elapsed: {0}”, this.Elapsed);
  }
  }
  借助于using语法,像下面的代码所示,可以检查一段代码的运行时间,并打印在控制台上。
  using (new AutoStopwatch())
  {
  Decimal total2 = 0;
  int limit2 = 1000000;
  for (int i = 0; i < limit2; ++i)
  {
  total2 = total2 + (Decimal)Math.Sqrt(i);
  }
  }
  10 使用光标
  当程序正在后台运行保存或是册除操作时,应当将光标状态修改为忙碌。可使用下面的技巧。
  class AutoWaitCursor : IDisposable
  {
  private Control _target;
  private Cursor _prevCursor = Cursors.Default;
  public AutoWaitCursor(Control control)
  {
  if (control == null)
  {
  throw new ArgumentNullException(“control”);
  }
  _target = control;
  _prevCursor = _target.Cursor;
  _target.Cursor = Cursors.WaitCursor;
  }
  public void Dispose()
  {
  _target.Cursor = _prevCursor;
  }
  }
  用法如下所示,这个写法,是为了预料到程序可能会抛出异常
  using (new AutoWaitCursor(this))
  {
  ...
  throw new Exception();
  }
  如代码所示,即使抛出异常,光标也可以恢复到之间的状态。