Лучший способ измерить (и контролировать) время обновления некоторых интерфейсов пользователя - PullRequest
0 голосов
/ 11 сентября 2011

Мое приложение должно отображать время выполнения некоторых операций.Одно из времени обработки - это время, затрачиваемое на обновление времени обработки в пользовательском интерфейсе (понятно?: D).

Частота операций может варьироваться от 0 до 100 Гц (10 мс).

Время процесса отображается на некоторых этикетках.Для установки значений я использую этот статический метод:

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. Я не хочу останавливать все попытки пользовательского интерфейса для обновления времени процессаИтак, как я должен контролировать, когда это нормально, чтобы обновить?Сейчас я делаю что-то вроде: только обновление, если время последнего обновления было 100 мс до этого момента.
  2. Если я использую BegingInvoke, возможно ли переполнение очередей с слишком большим количеством вызовов?
  3. Как измерить время обновления пользовательского интерфейса с помощью BeginInvoke?Лучший способ использовать Invoke?

1 Ответ

1 голос
/ 11 сентября 2011
  1. Довольно приемлемое для меня решение, потому что, если вы не контролируете его, это может привести к миганию данных на стороне пользовательского интерфейса.
  2. Нет, я не думаю, что вы можете переполнить, особенно на 10 мс, скорость.

  3. Если вы хотите быть уверены в своевременном измерении (насколько это возможно), решение определенно использует Invokde. То же самое можно использовать и в производстве.

Но это то, что вы собираетесь сравнить с вашими требованиями к конкретному приложению.

...