Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Скорости record / 12 сообщений из 12, страница 1 из 1
09.02.2019, 02:21
    #39771454
Swv
Swv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорости record
Здравствуйте.

Нагородил в коде что то вроде этого

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Tzero = record
.....

End

Tfirst = record
    A:integer;
......
    D: Tzero;
    .....
End



Те получается вроде как record в record. Вложенность получилась 3—4 уровня.

И плюс все это храниться в Tlist<TZero>

И в некоторых record тоже есть поля типа TList<>

В результате по коду получается выборка по довольно длинному «пути»

И закрадывается мысль, что это значительно влияет на производительность.

Раньше с TList<> да и с record особо плотно не работал.

Так вот хочу понять плохо ли такое использование record в плане производительности или все ж нормально?
...
Рейтинг: 0 / 0
09.02.2019, 02:27
    #39771456
Swv
Swv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорости record
И подозреваю, что подтормаживают именно итерации через items[i] по этим TList
...
Рейтинг: 0 / 0
09.02.2019, 02:42
    #39771457
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорости record
SwvИ закрадывается мысль, что это значительно влияет на производительность.
Конечно. Каждый уровень вложенности будет замедлять раз в пять, если не больше.
Поэтому об оптимизации надо думать еще до этапа проектирования.
Нет ничего важнее оптимизации.

А вместо вложенных рекордов используй вложенные массивы. С ними гораздо быстрее, чем без них. Особенно когда массивы используешь Items из TList<>.

Хорошо, что ты сюда обратился. Здесь много известных специалистов-оптимизаторов.
...
Рейтинг: 0 / 0
09.02.2019, 10:09
    #39771490
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорости record
Фэйтл Эра,

На последней фразе я аж поперхнулся (как раз завтракал)).
...
Рейтинг: 0 / 0
11.02.2019, 08:16
    #39771999
cptngrb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорости record
Vlad F, )))
...
Рейтинг: 0 / 0
11.02.2019, 11:00
    #39772073
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорости record
И сильна ли просадка? Или от нечего делать размышляешь? Первое правило оптимизации - не оптимизировать там, где это не требуется.
Ну и слушать всяких "известных оптимизаторов" надо с бо-о-ольшим фильтром, иначе забьешь себе голову разной чухней типа "Каждый уровень вложенности будет замедлять раз в пять", так что на полезные соображения места не останется
...
Рейтинг: 0 / 0
11.02.2019, 11:34
    #39772093
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорости record
Swv,

Думаю, ваше решение значительно быстрее будет, чем если организовать в программе подобие реляционной БД и каждый раз искать в своем списка по ключу.
...
Рейтинг: 0 / 0
11.02.2019, 12:17
    #39772133
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорости record
P.S.
тем более, у вас же везде будет доступ по известному (????) индексу, т.е. без поиска, и по ссылке. Куда же быстрее?
...
Рейтинг: 0 / 0
11.02.2019, 12:30
    #39772151
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорости record
Кроик Семёнтем более, у вас же везде будет доступ по известному (????) индексу, т.е. без поиска, и по ссылке. Куда же быстрее?
Так у него же .Items[], а это гарантированное копирование. В таких случаях нужно .List[] использовать, это прямой доступ.
...
Рейтинг: 0 / 0
11.02.2019, 15:21
    #39772304
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорости record
SwvЗдравствуйте.

Нагородил в коде что то вроде этого

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Tzero = record
.....

End

Tfirst = record
    A:integer;
......
    D: Tzero;
    .....
End



Те получается вроде как record в record. Вложенность получилась 3—4 уровня.

И плюс все это храниться в Tlist<TZero>

И в некоторых record тоже есть поля типа TList<>

В результате по коду получается выборка по довольно длинному «пути»

И закрадывается мысль, что это значительно влияет на производительность.
Это НИКАК не влияет на производительность


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
procedure TForm5.FormCreate(Sender: TObject);
type
  TZero = record
    TZ: Integer;
  end;

  TFirst = record
    TF: Integer;
    TZ: TZero;
  end;
var
  TZ1: TZero;
  TF1: TFirst;

begin
  TZ1.TZ := 1; // выполняется за 1 инструкцию

  TF1.TF := 2; // выполняется за 1 инструкцию

  TF1.TZ.TZ := 3; // выполняется за 1 инструкцию
end;
...
Рейтинг: 0 / 0
11.02.2019, 18:03
    #39772458
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорости record
Premature optimization is the root of all evil (c)

TC, реализуй как придумал, измерь производительность, не устроит - тогда будет о чем поговорить, а так сивка-бурка в безвоздушном пространстве
...
Рейтинг: 0 / 0
11.02.2019, 22:44
    #39772534
swame2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорости record
Квейд,

На оптимизацию не влияет, но сдается что значение присвоится не туда куда надо (в список), а в копию.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Скорости record / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]