![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скорость работы с объектами в Delphi
Strange man © (2007-07-17 20:55:00)Скажите пожалуйста, с чем быстрее работать - с "class-like" records или с классами? Насколько велика разница? Если учитывать, что записи тоже будут создаваться динамически, т. к. в основном они используются как Array of record.
Ещё встречный вопрос: с чем быстрее работать - с памятью в стэке или с памятью, выделенной динамически? Почему?
Поиск не помонает: http://www.google.com/search?hl=ru&q=%D1%87%D1%82%D0%BE+%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%B5%D0%B5+class+record&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=
Ega23 (2007-07-18 17:19:00) [41]Ещё раз рекомендую заглянуть в исходники TCustomTreeView и посмотреть, как этот монстр реализован.
Ega23 (2007-07-18 17:17:00) [42]
> Чё? Я так понимаю, что ты хочешь сказать, что единственная
> причина того, что VirtualTreeView работает быстрее, чем
> стандартный контрол - только в использовании записей в качестве
> узлов? Тем самым ты утверждаешь, что использование записей
> даёт такой существенный прирост в скорости?
У тебя с адекватностью как? Я говорю, что яхта лучше чем первая казанка с подвесным мотором. А ты на основании этого делаешь вывод, что дизель - лучше. Потому что солярку использует.
Сергей М. (2007-07-18 17:15:00) [43]"игролепщики")
Сергей М. (2007-07-18 17:15:00) [44]"блохоловы", блинн)
Сергей М. (2007-07-18 17:13:00) [45]
> Знаком, по крайней мере есть справочник
Ну так и посмотри на код, генерируемый компайлером в том или ином случае !
В чем проблема-то ?
> DevilDevil © (18.07.07 17:10) [29]
см. выше)
Игорь Шевченко (2007-07-18 17:12:00) [46]DevilDevil © (18.07.07 17:00) [23]
Это было давно и неправда. На современных процессорах количество команд в единицу времени не выражается целыми числами с учетом конвейеров.
Sdubaruhnul (2007-07-18 17:11:00) [47]> есть такой.
Спасибо за подтверждение.
> Гм... Записи чего? И вместо каких классов?
Если речь о TreeView, то можно было бы догадаться, что записи в качестве... там-дадам... УЗЛОВ.
>>>хотя это не единственная причина.
> Ты для начала загляни в реализацию TCustomTreeView, а потом говори.
Чё? Я так понимаю, что ты хочешь сказать, что единственная причина того, что VirtualTreeView работает быстрее, чем стандартный контрол - только в использовании записей в качестве узлов? Тем самым ты утверждаешь, что использование записей даёт такой существенный прирост в скорости?
> Быстрее чего(кого)?
Стандартного дерева, которое использует класс TTreeNode в качестве узлов.
DevilDevil (2007-07-18 17:10:00) [48]> Сергей М. © (18.07.07 16:58) [22]
> с классами работать не быстрее
> Галиматья несусветная)
если вопрос в скорости обращения к полям... то "Какие ваши доказательства"(с) ?
Strange man (2007-07-18 17:10:00) [49]Знаком, по крайней мере есть справочник
Сергей М. (2007-07-18 17:06:00) [50]
> Strange man (18.07.07 17:05) [26]
С системой команд целевого ЦП ты, надеюсь, знаком ?
Strange man (2007-07-18 17:05:00) [51]
> DevilDevil © (18.07.07 16:54) [18]
> Разница между record-ами и классами только в конструкторе/деструкторе.
>
>
> Обращение к полям "по указателю" выполняется с одной скоростью.
> Обращение к свойству (read/write field) = обращению к полю.
>
>
> Следующий вопрос.
>
> К полям record-а в стеке обращение происходит в 2 раза быстрее.
> Но если пользоваться with, то все "потери" скорее всего
> соптимизируются до потери 1 такта.
Спасибо.
> P.S. мне кажется оптимизировать надо в других местах
В каких?
> Сергей М. © (18.07.07 16:56) [19]
Можешь в 2х словах объяснить, почему мой тест тупой? Что я не учитываю?
DevilDevil (2007-07-18 17:04:00) [52]
var
R : TRect;
function SomeProc() : integer;
begin
// ...
Result := R.Left; // 1 такт
end;
DevilDevil (2007-07-18 17:03:00) [53]
function SomeProc(R : PRect) : integer;
begin
// ...
Result := R.Left; // 1 такт если eax не был запорчен
end;
DevilDevil (2007-07-18 17:00:00) [54]
var
R : TRect;
begin
//...
Result := R.Left; // 1 такт (1 операция)
end;
var
R : PRect;
//...
Result := R.Left; // 2 такта (2 операции)
Сергей М. (2007-07-18 16:58:00) [55]
> с классами работать не быстрее
Галиматья несусветная)
DevilDevil (2007-07-18 16:58:00) [56]если тебе так хочется это услышать, то "с классами работать не быстрее"
Сергей М. (2007-07-18 16:57:00) [57]
> К полям record-а в стеке обращение происходит в 2 раза быстрее
галиматья несусветная)
Сергей М. (2007-07-18 16:56:00) [58]
> как сделать нормальный?
Для начала изучить принцип действия конкретного оптимизирующего компимлятора.
Боюсь, тебе это не по силам, судя по амбициям)
DevilDevil (2007-07-18 16:54:00) [59]Разница между record-ами и классами только в конструкторе/деструкторе.
Обращение к полям "по указателю" выполняется с одной скоростью. Обращение к свойству (read/write field) = обращению к полю.
Следующий вопрос.
К полям record-а в стеке обращение происходит в 2 раза быстрее. Но если пользоваться with, то все "потери" скорее всего соптимизируются до потери 1 такта.
P.S. мне кажется оптимизировать надо в других местах
Strange man (2007-07-18 16:53:00) [60]
> Твой "тупой" тест абсолютно ни о чем не говорит)
И как сделать нормальный?