Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
ВнизКак сделать аналог 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c