Как сократить параметры с максимума до необходимых?

 

Как создать миллион объектов типа текст, но удалить повторяющиеся переменные типа цвет и размер текста, сократив параметры с максимума до необходимых?


bool TextCreate(const long              chart_ID=0,               // ID графика
                const string            name="Text",              // имя объекта
                const int               sub_window=0,             // номер подокна
                datetime                time=0,                   // время точки привязки
                double                  price=0,                  // цена точки привязки
                const string            text="Text",              // сам текст
                const string            font="Arial",             // шрифт
                const int               font_size=10,             // размер шрифта
                const color             clr=clrRed,               // цвет
                const double            angle=0.0,                // наклон текста
                const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки
                const bool              back=false,               // на заднем плане
                const bool              selection=false,          // выделить для перемещений
                const bool              hidden=true,              // скрыт в списке объектов
                const long              z_order=0)                // приоритет на нажатие мышью
 
BillionerClub:

Как создать миллион объектов типа текст

В цикле. Только не уверен, что памяти хватит.

, но удалить повторяющиеся переменные типа цвет и размер текста, сократив параметры с максимума до необходимых?

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

 
BillionerClub:

Как создать миллион объектов типа текст, но удалить повторяющиеся переменные типа цвет и размер текста, сократив параметры с максимума до необходимых?


Достаточно всего 3 параметра.

  1. Имя объекта              // name
  2. Время координаты     // time
  3. Цена координаты.      // price

И если нет необходимости отдельно вписывать текст, то сразу и текст передать… // text

 
Ihor Herasko #:

В цикле. Только не уверен, что памяти хватит.

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

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

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

Использование общих переменных или шаблонов стилей поможет избежать этого дублирования. Например, можно создать один раз стиль текста и ссылаться на него при создании объектов. Это и есть суть паттерна Flyweight: разделять общие данные между несколькими объектами.

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

 
BillionerClub #:

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

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

Использование общих переменных или шаблонов стилей поможет избежать этого дублирования. Например, можно создать один раз стиль текста и ссылаться на него при создании объектов. Это и есть суть паттерна Flyweight: разделять общие данные между несколькими объектами.

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

У каждого графического объекта все эти свойства имеются. Нет разницы, устанавливается соответствующее свойство объекту или нет. Если не устанавливаете, то свойство от этого никуда не денется, оно все равно существует (и занимает память, соответственно). Просто значение этого свойства будет по умолчанию. Таким образом, вызов функции с одним значением или с десятью никак на расход памяти не повлияет. Может повлиять на быстродействие, но, на мой взгляд, совершенно несущественно. Так что по сути этого вопроса беспокоиться нечего.

Беспокоиться нужно именно насчет количества объектов. Даже если на их поддержку у терминала хватит памяти, то такое количество объектов может ощущаться в виде некоторого (или даже существенного) подтормаживания платформы.

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

 
BillionerClub #:

Использование общих переменных или шаблонов стилей поможет избежать этого дублирования. Например, можно создать один раз стиль текста и ссылаться на него при создании объектов. Это и есть суть паттерна Flyweight: разделять общие данные между несколькими объектами.

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

Вы получается сами отвечаете на свой вопрос? Если в курсе про паттерны, то добавьте ещё паттерн Builder (а-ля, Object << "name" << "text" << x << y; -- заполняются только используемые свойства) и получите решение.