Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

Как сделать аналог packed record только для классов.   Найти похожие ветки 

 
Тимохов   (2003-11-13 13:04) [0]

Судя по хелпу дельфи этого делать нельзя. Пока я делаю так, что заношу все свойства в packed record и в классе делаю одно свойство типа fProperties: TPropPackedRecord. С смысле экономии памяти очень помогает. Но! В смысле быстродействия стало хуже, при том такой же эффект наблюдается если снять packed с record"а.
Вопрос: с чем может быть связано ухудшение быстродействия в данном случае?


 
clickmaker ©   (2003-11-13 13:08) [1]

Процессор быстрей работает с данными, выравненными на границу 4 байта, т.е. родной размер для 32-битной архитектуры


 
Тимохов   (2003-11-13 13:10) [2]

Ну это то понятно. Я в конце вопроса поправился, что такой же эффет наблюдается если снять packed с записи. При этом, насколько я понимаю все внутри record выровнено по 4 байта. Или я ошибаюсь, внутри record без слова packed не обязано быть все выровнено?


 
clickmaker ©   (2003-11-13 13:14) [3]

Цитата из дельфового хелпа: "By default, the values in a structured type are aligned on word or double-word boundaries for faster access"


 
Тимохов   (2003-11-13 13:19) [4]

Про цитату понял, сам ее видел, вопрос про выравнивание записей задал с целью уточнения.

На самом деле исходный вопрос можно перефразировать так:
есль ли разница для дельфи в двух кодах:
(1)
TRec = record
name: string
end;
TClass1 = class
rec: trec;
end;

(2)
TClass2 = class
name: string;
end;

Если у кого достоверная информация о том, что вариант 1 ДОЛЖЕН работать медленне?


 
panov ©   (2003-11-13 14:42) [5]

А что, тому, что для работы с невыровненными по границе данными, процессору требуется дополнительное время на обработку, требует еще подтверждения?

А в твоем примере совершенно без разницы, определена строка внутри структуры или отдельно.


 
Тимохов   (2003-11-13 14:54) [6]

Понял.
Я вообще то тоже так думал, что разницы быть не должно (т.к. все вроде как должно быть выровнено), однако она есть.

Ладно пойду asm ботать - там всегда найдешь ответ.


 
PVOzerski ©   (2003-11-13 14:55) [7]

2[4]:
Разница-то огромная. Ваш TClass1 - неявный потомок tObject, а tObject содержит в себе не так уж мало методов. И создавать его надо динамически, причем с вызовом конструктора.


 
han_malign ©   (2003-11-13 16:07) [8]

> однако она есть.
- и как ты выяснил, интересно?


 
han_malign ©   (2003-11-13 16:10) [9]

> Судя по хелпу дельфи этого делать нельзя.
{$A-}
TClass2 = class
name: string;
end;
{$A+}


 
Тимохов   (2003-11-13 16:36) [10]

[8] Вообще говоря через засекание времени с одним и другим подходом. Разница есть, причем достаточно ощутимая. Структура данных очень большая - порядка 60 мегов. Работа с ней ведется достаточно плотная, причем с очень большим количеством доступов к переменным класса.

[9] Спасибо посмотрю... да, что-то я раньше пропустил мимо глаз "In the {$A1} or {$A-} state, fields are never aligned. All record and class structures are packed."


 
han_malign ©   (2003-11-13 16:51) [11]

> Структура данных очень большая - порядка 60 мегов
- а чего ж еще хотел - пропускную способность памяти, да и файл подкачки, еще ни кто не отменял, естественно, с packed быстрее работать будет. И "очень большое количество доступов к переменным класса" - здесь абсолютно не причем...

З.Ы. 60 мегов - это не структура - это поток, и работать с ним надо как с потоком. А потокам на выравнивание положить - хоть битовые поля заводи...


 
Erik ©   (2003-11-13 17:10) [12]

Возможно стоит пересмотреть метод работы с данными, если это какято структура то стоит использовать фаил или базу данных. Будет быстрее, чтоты сначала думается по другому. Или хотябы TFileStream использовать, а еще лучше использовать виртуальныю с траницу из файла подкачки на http://www.delphikingdom.com/ был пример.


 
Тимохов   (2003-11-13 17:20) [13]

2[12] Про файл подкачки спасибо.
Проблема в том, что на самом деле-то делаем то досаточно безобидную штуку - некий свой аналог qreport, только в чем-то куда более навернутый и мощный. Я бы сказал, что это похоже больше на word. На отчетах до 300 страниц (причем с большим количеством вложенных таблиц) все работает прекрасно - весь цикл до вывода в метафайлы занимает секунд 20, что даже для word неплохо. Хотелось бы, конечно, и большее кол-во страниц переваривать. Вот и ищем всякие пути оптимизации. Беда в том, что теперь каждый следующий шаг дается с большим трудом. Поэтому файл подкачки для такой штуки пока использовать не очень хочется. Но в дальнейшем, может быть, придется прибегнуть к ним.



Страницы: 1 вся ветка

Текущий архив: 2003.11.24;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.034 c
14-79142
Yashan
2003-10-30 19:25
2003.11.24
Хочу помочь создателям Doom3?


11-78864
Boguslaw
2003-03-16 11:34
2003.11.24
Where is KOL archiw ?


14-79156
Стьюдент
2003-10-31 11:52
2003.11.24
Программы будующего


3-78815
Davinchi
2003-11-04 13:14
2003.11.24
ошибка при установке фильтра в ADO таблице


1-79035
Relaxxx
2003-11-12 17:18
2003.11.24
Нужна очень странная вещь....ДЕРЕВО-ТАБЛИЦА???????7