C # Относительно производительности генерации элементов формы - PullRequest
0 голосов
/ 20 ноября 2011

В настоящее время я использую синтаксис для генерации элементов формы и всего содержимого при запуске.Мне было интересно, есть ли какой-либо прирост производительности от этого?Мне просто не нравится раздутое чувство использования редактора в исходном коде.

Я имею в виду, в основном, если бы я использовал редактор, у меня была бы такая настройка для моего проекта: 3 панели x 44 изображения значкови текстовые элементы.Где, как и в моем коде, я могу просто использовать цикл для генерации всех элементов, поскольку в свойствах не так много различий, кроме источника или значения.

Ответы [ 2 ]

1 голос
/ 20 ноября 2011

Нет, нет никакого преимущества в том, что вы делаете.Фактически, маленьким способом, вы делаете меньше производительности.

Например, представьте, что в вашей форме есть десять текстовых полей, каждое из которых содержит текст от «1» до «10».Код конструктора вашей формы будет выглядеть примерно так:

textBox1 = new TextBox();
textBox1.Text = "1";
Controls.Add(textBox1);
textBox2 = new TextBox();
textBox2.Text = "2";
Controls.Add(textBox2);
textBox3 = new TextBox();
textBox3.Text = "3";
Controls.Add(textBox3);
textBox4 = new TextBox();
textBox4.Text = "4";
Controls.Add(textBox4);
textBox5 = new TextBox();
textBox5.Text = "5";
Controls.Add(textBox5);
textBox6 = new TextBox();
textBox6.Text = "6";
Controls.Add(textBox6);
textBox7 = new TextBox();
textBox7.Text = "7";
Controls.Add(textBox7);
textBox8 = new TextBox();
textBox8.Text = "8";
Controls.Add(textBox8);
textBox9 = new TextBox();
textBox9.Text = "9";
Controls.Add(textBox9);
textBox10 = new TextBox();
textBox10.Text = "10";
Controls.Add(textBox10);

(На самом деле, он будет разбит, поскольку создание экземпляров, инициализация и добавление обычно находятся в разных местах, но это хорошо для иллюстрации).

Теперь, конечно, это многословно.Но чистое многословие в сгенерированном коде, как правило, не имеет значения, поскольку никто не пишет (или, в идеале, читает ) его.Если, конечно, это не снижает производительность, но я к этому подхожу.

Используя ваш подход, вы (правильно) использовали бы цикл, так как этот код довольно повторяющийся и просто умоляет посмотреть немного большекратким.Что-то вроде ...

for(int i = 1; i <= 10; i++)
{
    TextBox box = new TextBox();

    box.Text = i.ToString();

    Controls.Add(box);
}

Конечно, гораздо более читабельно.Но, однако, давайте посмотрим на работу, которую среда выполнения фактически должна выполнять для каждого текстового поля в каждом подходе.

Во-первых, она делает это:

  • Создание нового экземпляраTextBox
  • Установите для свойства Text строковый литерал
  • Добавьте в коллекцию Controls

Во втором случае это необходимо сделать:

  • Увеличение целочисленной переменной
  • Сравнение с состоянием терминала
  • Создание TextBox
  • Преобразование целого числа в строку
  • Присвойте эту промежуточную строку свойству Text
  • Добавьте в коллекцию Controls

Теперь, является ли дополнительная работа существенной?Нет. Вы когда-нибудь заметите столь незначительный удар по производительности, который вы получите от дополнительной работы?Если вы делаете, вам нужен новый компьютер.Но ваш вопрос состоял в том, была ли ваша работа более эффективной, и ответ был «нет».

0 голосов
/ 20 ноября 2011

Вы не получите от этого ничего, вы потеряете поверхность проектирования не только для вас, но и для ваших нынешних или будущих коллег.

Я бы создал пользовательские элементы управления для повторяющегося интерфейса,тогда вы получите дизайн поверхности, меньше вещей, а также некоторые инкапсуляции и потенциального повторного использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...