2011-09-11 7 views
0

私のアプリはいくつかの操作の処理時間を表示する必要があります。プロセス時間の1つは、UIでプロセス時間をリフレッシュするために費やされた時間です(それを得ましたか?:D)。ユーザーインターフェイスの一部のリフレッシュ時間を測定する(および制御する)最善の方法

操作の頻度は、0〜約100 Hz(10 ms)まで変化します。

処理時間は一部のラベルで表示されます。

public Class UserInteface 
{ 
    //Static action to SafeSetControlText 
    private static Action<Control, string> actionSetControlText = delegate(Control c, string txt) { c.Text = txt; }; 

    //Control 
    //Set Text 
    public static void SafeSetControlText(Control control, string text, bool useInvoke = false) 
    { 
     //Should I use actionSetControlText or it is ok to create the delegate every time? 
     Action<Control, string> action = delegate(Control c, string txt) { c.Text = txt; }; 
     if (control.InvokeRequired) 
     { 
      if (useInvoke) 
       control.Invoke(action, new object[] { control, text }); 
      else 
       control.BeginInvoke(action, new object[] { control, text }); 
     } 
     else 
      action(control, text); 
    } 
} 

質問:

  1. 私はプロセス時間を更新するためにtryngすべての私のUIをフリーズしたくないので、それがあるときにどのように私は制御する必要があり、それは私がこの静的メソッドを使用して値を設定するにはリフレッシュするには?今、私のようなことをやっています:前回の更新時刻が100 msだった場合にのみ更新します。
  2. BegingInvokeを使用している場合は、オーバーフローが発生する可能性があります。コールが多すぎるキューはありますか?
  3. BeginInvokeを使用してのUI更新時間を測定するにはどうすればよいですか?最善の方法はInvokeを使用することですか?

答えて

1
  1. かなり受け入れ可能な解決策は、私が、あなたはそれをコントロールしていない場合、それはUI側で点滅データになることが原因。
  2. いいえ、私はあなたがオーバーフローできるとは思わない、特に10ミリ秒のスピード。

  3. 時間測定(可能な限り)を確実にしたい場合、解決策は間違いなくInvokdeを使用しています。同じ生産でも同じように使います。

しかし、これはあなたの特定のアプリケーション要件に対して測定するものです。

+0

Hummのおかげで、デリゲートについてどう思いますか?毎回新しいデリゲートを作成してもよろしいですか、静的なデリゲートを使用する方が良いですか? – Pedro77

+1

@ Pedro77:絶対に、申し訳ありませんが、私はこれを逃した。毎回デリゲートを作成せず、初期化メソッドで一度だけ作成します。 – Tigran

+0

メトスは静的なので、上のコードのように、Illは静的なデリゲートを1つ使用すると思います。それは "悪いコード"ですか? – Pedro77

関連する問題