powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Список классов vs списка записей - в чем преимущество?
25 сообщений из 63, страница 2 из 3
Список классов vs списка записей - в чем преимущество?
    #39762603
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разница между твоим и моим кодом не в скорости а в том что мой "скрывает" grow буффер в массиве от компилятора.

И только.
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762604
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. если твой Plus=21 то после добавления 5 элементов твой массив будет выглядеть так:
[0,1,2,3,4,0,0,0,0,0,0,... и так еще 11 раз]
а мой так:
[0,1,2,3,4] + "невидимый" буффер на 16 элементов.
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762605
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сам понимаешь полдьзоватся массивом в котором буффер "невидим" не в пример удобней.
При той же высокой скорости.
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762608
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смешной ты, ради вывода в дебаг-инфу настрочил столько бесполезного кода

Насчёт авторПри той же высокой скорости. не верю.
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762613
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёт я решил, сделать элегантный вывод !

Вот, он

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  windows, System.SysUtils;

type
  PDynArrayRec = ^TDynArrayRec;

  TDynArrayRec = packed record
{$IFDEF CPU64BITS}
    _Padding: Integer; // Make 16 byte align for payload..
{$ENDIF}
    RefCnt: Integer;
    Length: NativeInt;
  end;

  ArrayEx<T> = record
    v: Pointer;
    CurrentLength, MaxLength: Integer;
    temp: TArray<T>;
    procedure add(Value: T);
    function GetIndex(i: Integer): T;
    function GetIndex2(i: Integer): T;
  end;

procedure ArrayEx<T>.add(Value: T);
type
  Test = array of T;
const
  elSize = SizeOf(Pointer);
  Plus = 48;
begin
  if MaxLength < CurrentLength then
  begin
    Inc(MaxLength, Plus);
    Dec(PByte(v), SizeOf(TDynArrayRec));
    v := SysReallocMem(v, MaxLength * elSize + SizeOf(TDynArrayRec));
    Inc(PByte(v), SizeOf(TDynArrayRec));
  end
  else if v = nil then
  begin
    MaxLength := Plus;
    v := SysGetMem(MaxLength * elSize + SizeOf(TDynArrayRec));
    Inc(PByte(v), SizeOf(TDynArrayRec));
  end;

  Test(v)[CurrentLength] := Value;

  Inc(CurrentLength);

  PPointer(@temp)^ := v;
  PDynArrayRec(NativeUInt(temp) - SizeOf(TDynArrayRec)).Length := CurrentLength;
end;

function ArrayEx<T>.GetIndex(i: Integer): T;
begin
  if (i >= MaxLength) and (i <= CurrentLength) then
    Result := GetIndex2(i);
end;

function ArrayEx<T>.GetIndex2(i: Integer): T;
type
  Test = array of T;
begin
  Result := Test(v)[i];
end;

function sprintf(S: PAnsiChar; const Format: PAnsiChar): Integer; cdecl;
  varargs; external 'msvcrt.dll';

function PrintTime(T: Int64): AnsiString;
var
  A, b: Int64;
begin
  Result := '';
  if QueryPerformanceCounter(A) and QueryPerformanceFrequency(b) then
  begin
    SetLength(Result, 25);
    SetLength(Result, sprintf(PAnsiChar(Result), '%f', single((A - T) / b)));
  end;
end;

var
  arr: ArrayEx<Integer>;
  i: Integer;
  T: Int64;

begin
  try
    QueryPerformanceCounter(T);

    for i := 0 to 50000000 do
      arr.add(i);

    Writeln(PrintTime(T));

    for i := 0 to 100 do
      Writeln(arr.GetIndex2(i));

    { TODO -oUser -cConsole Main : Insert code here }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;

end.



Работает за 0.655926 сек
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762618
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё. Из этого больше не выжить. 0.619081 сек

А так же добавил метод init что бы поля почистить перед стартом

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  windows, System.SysUtils;

type
  PDynArrayRec = ^TDynArrayRec;

  TDynArrayRec = packed record
{$IFDEF CPU64BITS}
    _Padding: Integer; // Make 16 byte align for payload..
{$ENDIF}
    RefCnt: Integer;
    Length: NativeInt;
  end;

  ArrayEx<T> = record
    v: Pointer;
    CurrentLength, MaxLength: Integer;
    temp: TArray<T>;
    procedure init;
    procedure add(Value: T);
    function GetIndex(i: Integer): T;
    function GetIndex2(i: Integer): T;
  end;

procedure ArrayEx<T>.init;
begin
  v := nil;
  CurrentLength := 0;
  MaxLength := 0;
end;

procedure ArrayEx<T>.add(Value: T);
type
  Test = array of T;
const
  elSize = SizeOf(Pointer);
  Plus = 48;
begin
  if MaxLength < CurrentLength then
  begin
    Inc(MaxLength, Plus);
    Dec(PByte(v), SizeOf(TDynArrayRec));
    v := SysReallocMem(v, MaxLength * elSize + SizeOf(TDynArrayRec));
    Inc(PByte(v), SizeOf(TDynArrayRec));

    PPointer(@temp)^ := v;
  end
  else if v = nil then
  begin
    MaxLength := Plus;
    v := SysGetMem(MaxLength * elSize + SizeOf(TDynArrayRec));
    Inc(PByte(v), SizeOf(TDynArrayRec));

    PPointer(@temp)^ := v;
  end;

  Test(v)[CurrentLength] := Value;

  Inc(CurrentLength);

  PDynArrayRec(NativeUInt(temp) - SizeOf(TDynArrayRec)).Length := CurrentLength;
end;

function ArrayEx<T>.GetIndex(i: Integer): T;
begin
  if (i >= MaxLength) and (i <= CurrentLength) then
    Result := GetIndex2(i);
end;

function ArrayEx<T>.GetIndex2(i: Integer): T;
type
  Test = array of T;
begin
  Result := Test(v)[i];
end;

// -----------------------

function sprintf(S: PAnsiChar; const Format: PAnsiChar): Integer; cdecl;
  varargs; external 'msvcrt.dll';

function PrintTime(T: Int64): AnsiString;
var
  A, b: Int64;
begin
  Result := '';
  if QueryPerformanceCounter(A) and QueryPerformanceFrequency(b) then
  begin
    SetLength(Result, 25);
    SetLength(Result, sprintf(PAnsiChar(Result), '%f', single((A - T) / b)));
  end;
end;

procedure Test; // Роли не играло, вынеся  в отдельную процедуру 
var
  arr: ArrayEx<Integer>;
  i: Integer;
begin
  with arr do
  begin

    init;

    for i := 0 to 50000000 do
      add(i);

    // for i := 0 to 100 do
    // Writeln(GetIndex2(i));
  end;
end;

var
  T: Int64;

begin
  try
    QueryPerformanceCounter(T);
    Test;
    Writeln(PrintTime(T));
    { TODO -oUser -cConsole Main : Insert code here }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;

end.

...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762636
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо,

ищи уже работу, впустую время тратишь
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762694
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatРади быстродействия в своем TArrayEx<T> = record даже SetLength захакал. :)

Реализовал то, что в FastMM делается и для массивов, и для строк
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762704
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

Как-то хреново делается. Ибо тормозит.
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762711
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо,

Интегеры добавляются здорово, ура! А теперь поудаляй из своего списка через одно поле. И желательно не integer, а какой-нибудь record <TProject> полей на 10-15.
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762714
b0rk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если надо разово создать, например, миллион экземпляров, то массив рекордов будет быстрее, т.к. это один Alloc большого куска памяти (что гораздо быстрее миллиона маленьких) и нет миллиона вызовов конструктора. Eсли потом надо, например, сортировать список или добавлять/удалять элементы в середину, то с классами быстрее, т.к. это просто работа с указателем.
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762720
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоСмешной ты, ради вывода в дебаг-инфу
Естессно не только ради дебаг инфы.

Например arr1.items+arr2.items будет корректно работать.


настрочил столько бесполезного кода"Столько" - это трочек 5? ;)
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762721
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b0rk,

>>добавлять/удалять элементы в середину
и там и там не особо быстро

сортировку с записями не факт, если стандартную сортировку на месте не использовать, ИМХО она уже моветон
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762898
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Приятного знакомства
http://docwiki.embarcadero.com/RADStudio/Rio/en/Operator_Overloading_(Delphi)

А теперь магия удаления, алаба Кидабра

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function ArrayEx<T>.Remove(i: Integer): T;
begin
  Dec(MaxLength);
  System.Move(Test(v)[i + 1], Test(v)[i], (MaxLength - i) * SizeOf(elSize));

  Dec(CurrentLength);

  PDynArrayRec(NativeUInt(temp) - SizeOf(TDynArrayRec)).Length := CurrentLength;
end;



Нет пустых элементов
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762906
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удаление с добавлением отработало за 0.598266

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  windows, System.SysUtils;

type
  PDynArrayRec = ^TDynArrayRec;

  TDynArrayRec = packed record
{$IFDEF CPU64BITS}
    _Padding: Integer; // Make 16 byte align for payload..
{$ENDIF}
    RefCnt: Integer;
    Length: NativeInt;
  end;

  ArrayEx<T> = record
    v: Pointer;
    CurrentLength, MaxLength: Integer;
    temp: TArray<T>;
    procedure init;
    procedure add(Value: T);
    function GetIndex(i: Integer): T;
    function GetIndex2(i: Integer): T;
    function Remove(i: Integer): T;

  type
    Test = array of T;

  const
    elSize = SizeOf(Pointer);
    Plus = 48;
  end;

procedure ArrayEx<T>.init;
begin
  v := nil;
  CurrentLength := 0;
  MaxLength := 0;
end;

procedure ArrayEx<T>.add(Value: T);
begin
  if MaxLength < CurrentLength then
  begin
    Inc(MaxLength, Plus);
    Dec(PByte(v), SizeOf(TDynArrayRec));
    v := SysReallocMem(v, MaxLength * elSize + SizeOf(TDynArrayRec));
    Inc(PByte(v), SizeOf(TDynArrayRec));

    PPointer(@temp)^ := v;
  end
  else if v = nil then
  begin
    MaxLength := Plus;
    v := SysGetMem(MaxLength * elSize + SizeOf(TDynArrayRec));
    Inc(PByte(v), SizeOf(TDynArrayRec));

    PPointer(@temp)^ := v;
  end;

  Test(v)[CurrentLength] := Value;

  Inc(CurrentLength);

  PDynArrayRec(NativeUInt(temp) - SizeOf(TDynArrayRec)).Length := CurrentLength;
end;

function ArrayEx<T>.GetIndex(i: Integer): T;
begin
  if (i >= MaxLength) and (i <= CurrentLength) then
    Result := GetIndex2(i);
end;

function ArrayEx<T>.GetIndex2(i: Integer): T;
begin
  Result := Test(v)[i];
end;

function ArrayEx<T>.Remove(i: Integer): T;
begin
  Dec(MaxLength);
  System.Move(Test(v)[i + 1], Test(v)[i], (MaxLength - i) * SizeOf(elSize));

  Dec(CurrentLength);

  PDynArrayRec(NativeUInt(temp) - SizeOf(TDynArrayRec)).Length := CurrentLength;
end;

// -----------------------

function sprintf(S: PAnsiChar; const Format: PAnsiChar): Integer; cdecl;
  varargs; external 'msvcrt.dll';

function PrintTime(T: Int64): AnsiString;
var
  A, b: Int64;
begin
  Result := '';
  if QueryPerformanceCounter(A) and QueryPerformanceFrequency(b) then
  begin
    SetLength(Result, 25);
    SetLength(Result, sprintf(PAnsiChar(Result), '%f', single((A - T) / b)));
  end;
end;

procedure Test; // Роли не играло, вынеся  в отдельную процедуру
var
  arr: ArrayEx<Integer>;
  i: Integer;
begin
  with arr do
  begin

    init;

    for i := 0 to 50000000 do
      add(i);

    Remove(50000000 - 2);

    add(50000000 - 2);
  end;
end;

var
  T: Int64;

begin
  try
    QueryPerformanceCounter(T);
    Test;
    Writeln(PrintTime(T));
    { TODO -oUser -cConsole Main : Insert code here }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;

end.




То есть за 0.000001 понадобилось что бы удалить 50000000 - 2
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39762908
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Remove(100000); = 0.078513

Remove(1); = 0.085861
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39763024
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдоrgreat,

Приятного знакомства
http://docwiki.embarcadero.com/RADStudio/Rio/en/Operator_Overloading_(Delphi)

А теперь магия удаления, алаба Кидабра

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function ArrayEx<T>.Remove(i: Integer): T;
begin
  Dec(MaxLength);
  System.Move(Test(v)[i + 1], Test(v)[i], (MaxLength - i) * SizeOf(elSize));

  Dec(CurrentLength);

  PDynArrayRec(NativeUInt(temp) - SizeOf(TDynArrayRec)).Length := CurrentLength;
end;

Это ты точно мне писал?
Я про remove ничего не говорил.

Нет пустых элементов
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39763025
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдоrgreat,

Приятного знакомства
http://docwiki.embarcadero.com/RADStudio/Rio/en/Operator_Overloading_(Delphi)

А теперь магия удаления, алаба Кидабра

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function ArrayEx<T>.Remove(i: Integer): T;
begin
  Dec(MaxLength);
  System.Move(Test(v)[i + 1], Test(v)[i], (MaxLength - i) * SizeOf(elSize));

  Dec(CurrentLength);

  PDynArrayRec(NativeUInt(temp) - SizeOf(TDynArrayRec)).Length := CurrentLength;
end;


Нет пустых элементов


Это ты точно мне писал?
Я про remove ничего не говорил.
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39763031
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Нет, не тебе про удаления. Просто забыл ответ тому нажать
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39763363
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдоrgreat,
Нет, не тебе про удаления. Просто забыл ответ тому нажать
А теперь для затравки заценим перформанс для какого-нибудь упрощённого TProject с полями
project_id

project_nr

internal_project_nr

project_name

start_date

company_id

im_company__name

im_office__name

service_line

cost_center

project_manager

external_project_nr

currency

contact_name

device_drug_name

disease

project_budget

closing_date

end_date
Топикстартер хотел же именно <TProject> ;-)
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39763454
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimonka,

My - ArrayEx :: TForm -> 0.697550

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure Test;
var
  arr: ArrayEx<TForm>;
  i: Integer;
  v: TForm;
begin
  v := TForm.Create(nil);
  with arr do
  begin
    init;

    for i := 0 to 50000000 do
      add(v);
  end;
end;




TList :: TForm -> 0.798694
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure Test;
var
  arr: TList;
  i: Integer;
  v: TForm;
begin
  v := TForm.Create(nil);
  arr := TList.Create;
  with arr do
  begin

    for i := 0 to 50000000 do
      add(v);
  end;
end;




Remove 50000000 div 2

My - ArrayEx :: TForm -> 0.038616
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure Test;
var
  T: Int64;
  arr: ArrayEx<TForm>;
  i: Integer;
  v: TForm;
begin
  v := TForm.Create(nil);
  with arr do
  begin
    init;
    for i := 0 to 50000000 do
      add(v);
    QueryPerformanceCounter(T);
    Remove(50000000 div 2);
    Writeln(PrintTime(T));
  end;
end;




TList :: TForm -> 0.040716
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure Test;
var
  T: Int64;
  arr: TList;
  i: Integer;
  v: TForm;
begin
  v := TForm.Create(nil);
  arr := TList.Create;
  with arr do
  begin
    for i := 0 to 50000000 do
      add(v);

    QueryPerformanceCounter(T);
    Delete(50000000 div 2);
    Writeln(PrintTime(T));
  end;
end;

...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39763463
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сейчас понял, что нужно было использовать TList от System.Generics.Collections

Извиняюсь, извиняюсь! Что был глуп и слеп

0.993732
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure Test;
var
  arr: TList<TForm>;
  i: Integer;
  v: TForm;
begin
  v := TForm.Create(nil);
  arr := TList<TForm>.Create;
  with arr do
  begin
    for i := 0 to 50000000 do
      add(v);

  end;
end;



В общем мой ArrayEx выигрывает 0.296182

По удалению тоже самое что и у обычного TList плюс минус 0.0001
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39763466
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и что бы закрепить, тест ещё на integer

0.968195
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure Test;
var
  arr: TList<Integer>;
  i: Integer;
begin
  arr := TList<Integer>.Create;
  with arr do
  begin
    for i := 0 to 50000000 do
      add(i);
  end;
end;



Когда мой даёт 0.585812
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39763699
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо,

Вангую, что если нотификацию убрать (которой у тебя, к слову, нет), то будет примерно столько же.
...
Рейтинг: 0 / 0
Список классов vs списка записей - в чем преимущество?
    #39763718
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,

Что убрать? Создание ? Это не влияет.

И нет, не будет. Там много разных вызовов функций, проверок и так далее. Так что - не будет.
...
Рейтинг: 0 / 0
25 сообщений из 63, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Список классов vs списка записей - в чем преимущество?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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