powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопрос что лучше?
54 сообщений из 54, показаны все 3 страниц
Вопрос что лучше?
    #40018355
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разрабатываю "Игровой движок". Возникла необходимость сохранять все Игровые объекты на сцене. ИГРОВОЙ ОБЪЕКТ помимо стандартных данных содержит нетипизированный указатель. Можно использовать и просто список строк, но тогда будут проблемы по типу : необходимость символа разделителя, необходимость остальные форматы данных пихать в шлейф файлов тянущийся за списком строк и это всё вообще медленно... А юзание бд не на моём пути потому, что я не знаком с ними ВООБЩЕ (только приблизительная поверхностная обобщённая инфа), и мне кажется что для простого сохранения\загрузки бд - слишком круто;

Вопрос: Что лучше в данной ситуации : БД или список строк? Есть ли альтернатива всему этому, и тогда что с ней и как? И если лучше бд, то где блин найти как её быстренько подключить в 10.3 дельфине и общее кратенькое руководство, а запросы я где-нибудь уж точно сам откопаю.
[offtop]
p.s : блин я час писал целую статью, а на этапе отправления форум меня послал. Пришлось всё стирать и писать кратко и обобщённо.
p.p.s: я НЕ работаю программистом. Программирование лишь моё хобби
[/offtop]
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018357
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
начни с хранения в TList.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018358
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vizit0r#22232110 - начни с хранения в TList.
Можете пожалуйста привести весомые аргументы в пользу вашего выбора, т.к у меня тут выбор не на шутку и + я не хочу сильно костылить и хочу сделать максимально красивый и производительный код, насколько это позволительно для моего уровня.
P.S : почему сервер при присутствии в сообщении блоков цитаты и спойлера в квад
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018359
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что тебе этого хватит.
TDictionary, Tlist - для подавляющего большинства ненагруженных кешеров хватит с головой.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018360
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UtoECat,

json!
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018361
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ#22232116]UtoECat, - json!
С таким успехом и XML можно. Всё же это лучше обычного списка строк, но хочется и побыстрее тоже...
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018362
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UtoECatС таким успехом и XML можно. Всё же это лучше обычного списка строк, но хочется и
побыстрее тоже...
Это гораздо хуже, чем обычный список строк. Поэтому используй TList и даже не пытайся нарушать принцип KISS.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018363
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UtoECat,

на xml смотреть грустно. А на json - нормально.

А с чего ты решил, что нужно "побыстрее"? Ты уже что-то сделал, и все тормозит?
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018366
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ,
нет я блин не могу отправить сообщение
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018368
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

лучше в плане реализации разделения. Оригинальный JSON юзать не буду, но подобное может быть
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018369
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vizit0r,

При чём тут TDictonary разъясните пожалуйста?
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018370
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vizit0r,
Похоже вы меня неправильно поняли. Мне нужно сохранить всё это дело В ФАЙЛ.
p.S: На форуме что лимит слов в сообщении около 50? Почему я не могу отправлять сообщения среднего (100-200 слов) размера?
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018371
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UtoECat,

форум глючит.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018372
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>> При чём тут TDictonary разъясните пожалуйста?


Ты формируешь составной уникальный ключ и хранишь в общей "мусорке" все, что душе угодно с невообразимой скоростью записи и чтения.
И эта хрень легко сериализуется в текст вида "ключ=значение".
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018373
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как вариант TStream тоже не плохо. это пока лучшая по производительности идея... Но это сложненько немного.. Да и это НЕ ИЗБАВИТ ОТ ШЛЕЙФА ФАЙЛОВ, но это быстрее json и string list вместе взятых думаю точно...
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018374
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UtoECat
TStream тоже не плохо

шо?
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018375
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ,

ааа... Ну это интереснее уже что-то... Но меня чёт на TStream несёт... Думаю, что если сейчас с TStream разберусь, то бахну и на нём, а иначе список строк и TDICTONARY
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018376
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UtoECatМне нужно сохранить всё это дело В ФАЙЛ.

Тогда строки лучше всего. Лучше них только бинарный формат, но ты не осилишь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018377
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ,

Файловый поток это... Вот : http://www.delphi-manual.ru/articles/stream.php
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018380
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UtoECatесли сейчас с TStream разберусь
Не надо. Текстовый файл проще в исполнении и отладке. Один объект - одна строка. Процедура сериализации объекта в строку (и обратно) - в самом объекте. Просто, надёжно, быстро. В самый раз для программистов-хоббитов.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018382
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UtoECat> Но меня чёт на TStream несёт...
Стрим - это просто абстракция, реализованная в классах. К твоему вопросу никакого отношения не имеет.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018383
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ,
TFileStream
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018386
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, насчёт быстроты вашего варианта уж не знаю... Но я думаю, что TFileStream - сложный, но максимально экономный по эффективности вариант. Просто надо потренироваться. Да и если не выйдет тогда уж прибегну к строкам.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018387
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
UtoECatесли сейчас с TStream разберусь

Не надо. Текстовый файл проще в исполнении и отладке. Один объект - одна строка. Процедура сериализации объекта в строку (и обратно) - в самом объекте. Просто, надёжно, быстро. В самый раз для программистов-хоббитов.
[offtop]Так я и не хочу быть хоббитом :D Мне бы человеком хотя бы :D[/offtop]
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018388
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UtoECat>TFileStream

Что "TFileStream"? Стрим - это просто дырка, в которую сливают данные.

Ты лучше о формате данных подумай.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018389
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UtoECat
Разрабатываю "Игровой движок". Возникла необходимость сохранять все Игровые объекты на сцене. ИГРОВОЙ ОБЪЕКТ помимо стандартных данных содержит нетипизированный указатель.

В этот момент появляется ощущение кривого дизайна и необходимости лучшего изучения основ ООП. При грамотной реализации здесь поставленный вопрос просто не возникнет. Думаю, Вам стоит рассказать, как Вы строите свой "игровой движок" и спросить, как его стоит переделать.

UtoECat
Вопрос: Что лучше в данной ситуации : БД или список строк?

Скажем так, тащить в проект лишнюю сущность незачем. БД не исправит ошибок, допущенных при проектировании.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018390
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
*удалено
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018391
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UtoECatесли не выйдет тогда уж прибегну к строкам.

Двигаться надо от простого к сложному, а не наоборот.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018400
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

UtoECatесли не выйдет тогда уж прибегну к строкам.

Двигаться надо от простого к сложному, а не наоборот.

Нужно двигаться к максимально возможно эффективному и хорошему... На простом далеко не ускачешь.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018403
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UtoECat
Dimitry Sibiryakov

пропущено...

Двигаться надо от простого к сложному, а не наоборот.

Нужно двигаться к максимально возможно эффективному и хорошему... На простом далеко не ускачешь.

Тебе говорят, что делать, а ты какую-то хрень несёшь. Зачем спрашиваешь тогда?
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018405
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer

В этот момент появляется ощущение кривого дизайна и необходимости лучшего изучения основ ООП. При грамотной реализации здесь поставленный вопрос просто не возникнет. Думаю, Вам стоит рассказать, как Вы строите свой "игровой движок" и спросить, как его стоит переделать.

1. ООП - зло, если будет использоваться слишком часто. Думаю вы это понимаете. 2 . С ООП как с концепцией я знаком хорошо, т.к первые шаги в программировании делал на C#. И с его синтаксисом и функционалом в дельфи соответственно тоже.
3.Что-ж вы сами это попросили. Мой движок представляет из себя средство по обеспечению хранения, доступа к ИГРОВЫМ ОБЪЕКТАМ ( ЭТО НЕ ООП!!!) , обеспечивает возможность взаимодействия объектов друг с другом и взаимодействие пользователя с ними соответственно, способ установки и контроля поведения объектов, а так-же обеспечивает (по крайней мере должен будет в будущем) обеспечивать оптимизацию алгоритмов происходящих под капотом.
Движок я уже переписываю третий раз и в основном это я делал для достижения более удобного и красивого распределения кода по юнитам и исправлению ошибок, а так-же для добавления в будущем новой системы присвоения и выборке текстур.
Движок использует для отрисовки игрового пространства библиотеку OpenGL и в будущем будет поддерживать работу со звуком через bass.dll .
Игровой объект , это рекорд тип . Пока он реализован так :
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
TYPE TTRANSFORM = RECORD
X,Y,Z,SX,SY,R : REAL;
END;
TYPE TVISUAL = RECORD
R,G,B,A:BYTE; TEXTURE : INTEGER;
END;
TYPE TSEOBJECT = RECORD
TRNC : TTRANSFORM;VISUAL : TVISUAL;PARENT : INTEGER; ID:INTEGER; DATA : POINTER;
END;
TYPE PSEOBJECT = ^TSEOBJECT;


Функционал объектов, их отрисовка и прочее устанавливается объектом родителем. В объекте указан индекс родителя в МАССИВЕ РОДИТЕЛЕЙ. Сам родитель - абстрактный класс. Его финальная реализация (+\-)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
TYPE TGAMEPARENT = CLASS (TSEPARENT)
  PROCEDURE objCREATE(VAR OBJ:TSEOBJECT);OVERRIDE;
  PROCEDURE objPROCESS (VAR OBJ:TSEOBJECT;var scene:tgamescene;INDEX : integer);OVERRIDE;
  PROCEDURE objDRAW(VAR OBJ:TSEOBJECT);OVERRIDE;
  function objCOLLISION(CONST currOBJ:TSEOBJECT;CONST withOBJ:TSEOBJECT):boolean;OVERRIDE;
  PROCEDURE objDESTROY(VAR OBJ:TSEOBJECT);OVERRIDE;
  FUNCTION  objSAVE(VAR OBJ:TSEOBJECT):STRING;OVERRIDE;
  PROCEDURE objLOAD(VAR OBJ:TSEOBJECT;const s : string);OVERRIDE;
  PROCEDURE objACTION(VAR OBJ:TSEOBJECT; ACTION : BYTE);OVERRIDE;
END;



Игровая сцена - рекорд тип, состоящий из массива игровых объектов, а так-же массивов идентификаторов объектов : Массив идентификаторов сортированных по Z объектов в поле зрения, Массив id объектов, родители которых имеют реализацию objProcess, И массив id объектов с которыми МОЖЕТ производится коллизия (объектов недекораций);

Концепция движка подразумевает лишь необходимость описать родителей и написать дополнительные внешние факторы добавления \изменения\удаления некоторых объектов для получения готового игрового проекта. Код потихоньку пишется, функционал растёт. Необходимость сохранения загрузки - вещь очень необходимая, и я уже нашёл способ того как это сделать о чём написал выше.

Сейчас я в основном посиживаю в low level модулях движка, где дописываю код, т.к сел переписывать буквально неделю назад ( когда компилятор запутался в моём коде в прямом смысле этого слова)
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018407
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ,

Я же сказал, что уже решил как делать ! Сначала тесану TFILESTREAM, а если не выйдет, то уж ваши строки буду юзать.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018427
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UtoECat
Нужно двигаться к максимально возможно эффективному

Тогда прежде всего следует отказаться от Delphi и не трахать людям мозг. Чемпионом эффективности Delphi не будет никогда.

UtoECat
ООП - зло, если будет использоваться слишком часто.

Выберите что-нибудь одно: либо Вы новичок, который задаёт тривиальные вопросы, либо Вы знаток, который рассказывает как надо делать. Попытка сочетать то и другое показывает лишь невменяемость.

UtoECat
В объекте указан индекс родителя в МАССИВЕ РОДИТЕЛЕЙ

Красота. В начале шестидесятых, во времена Фортрана, программировали именно так. Мой научный руководитель, один из первых советских программистов, настойчиво склонял меня на этот стиль, объясняя, что указателей он не понимает и пользоваться ими опасно.

UtoECat
Сам родитель - абстрактный класс. Его финальная реализация (+\-)

Теперь объясните, какая разница, куда пихать результат метода objSAVE - в стрим, в текстовый файл или в БД? Исходный вопрос продолжает быть актуальным?
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018428
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж. Тяжело новичку в этом обществе старых троллей.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018431
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"новичок" случаем не такой же старый тролль?
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018435
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений
"новичок" случаем не такой же старый тролль?


тут вобщем-то 2 варианта - или от еще старее и толще, либо самое время начинать разбивать лицо в кровь ладонями, раз он пишет такое серьезно.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018453
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UtoECat, превращение объекта или целого дерева объектов в то, что можно записать в файл называется сериализация и есть много готовых решений для этого.
Я бы сначала рассмотрел возможность использовать встроенные средства Delphi (для формирования DFM, есть бинарный и текстовый варианты).
Древняя статья: https://rsdn.org/article/delphi/serialization.xml
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018456
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L1G,

нет у него объектов, которые классы.
Рекорды у него, смотри его последнее сообщение.
Вообще непонятно, что он хочет.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018461
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дегтярев Евгений
"новичок" случаем не такой же старый тролль?

Кодит, похоже, на терминале ЕС - 7927: нижний регистр символов отсутствует...
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018467
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Вообще непонятно, что он хочет.

Как раз вполне понятно. Во-первых, он откопал какую-нибудь книгу конца девяностых типа "Секреты программирования игр" (помнится, выходила такая в издательстве "Питер" с примерно таким же содержимым). Во-вторых, раскопал какое-нибудь доисторическое говно типа KOL и решил, что это очень круто. Теперь пытается скрестить ежа с ужом кривыми руками, дабы получить немерянный рулез.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018472
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Капсовый код, о майн готт...
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018476
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer,
1.А разве учиться на ошибках это плохо?
2. Я понимаю что такое указатели и массив родителей нужен для упрощения процесса сохранения
3. Данная тема закрыта
4. Не надо устраивать срач. Я же вас не заставляю использовать то, что я делаю, верно? Мой проект держится лишь на шестилетнем интузиазме и делается для собственного пользования и всю эту ох какую историю я рассказывать не буду.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018478
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer,

1.Хотел бахнуть я вообще-то сначала на С++, но меня мой знакомый уговорил на дельфи.
2. Я не совсем новичок.Первые вообще успехи я делал в ... А собственно не важно где.
3. Вопрос закрыт. Я опять же ЗАБЫЛ ПРО TFILESTREAM, потому что 1. Устал 2. Я про него мало чего читал.
4. Большая
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018481
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vizit0r,
Softwarer, книги тут не причём. Это полностью самостоятельно придуманная концепция.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018484
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UtoECat
1.А разве учиться на ошибках это плохо?

Смотря на чьих.

UtoECat
3. Данная тема закрыта

Замечательно. И всего-то потребовалось вспомнить про ООП.

UtoECat
Мой проект держится лишь на шестилетнем интузиазме

То есть, после шести лет работы и троекратного переписывания Вы задаёте такие вопросы и продолжаете быть уверены, что всё делаете правильно?
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018491
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer,
1. На своих-то
2. ИМХО вы вообще не читали здесь все сообщения. Мой вопрос был ЧТО ЛУЧШЕ ДЛЯ ХРАНЕНИЯ ДАННЫХ ОБ ИГРОВЫХ ОБЪЕКТАХ: Список строк или БД, но потом Я НАШЁЛ ТFILESTREAM и СКАЗАЛ :авторТема закрыта. Буду использовать TFILESTREAM, а если не выйдет, то тогда уж Список строк. Про ООП НЕ БЫЛО НИ СЛОВЦА (вообще мне стоило сразу сказать что такое игровой объект, как я понял из за этого были недопонимания).
3. С самого начала я полез в такую вещь как HiASM (основной пакет которого на дельфе кста), на нём просидел ПЯТЬ ЛЕТ, но осознал, что это всё фигня и каши на нём не сваришь; и потом перелез на C#, где мне не понравилось, а потом на дельфу собственно.
Разработка кода этого движка ведётся где-то всего 4-5 месяцев. Учил дельфи Три месяца до начала написания движка, т.е владею всеми основными понятиями ( только кроме дженериков, т.к посчитал их пока ненужными)
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018552
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UtoECat
т.е владею всеми основными понятиями ( только кроме дженериков, т.к посчитал их пока ненужными)

нет, не владеешь.
Ничем не владеешь. Ни пониманием ООП, ни пониманием правильного кода, ничем вообще.

Вообще это дело наживное, но ощущение что ты четко двигаешься сильно неправильной дорогой, думая что это круто и здорово.

Я когда взялся, точнее подхватил полудохлый проект - с первых же дней старался сделать его лучше, используя правильные технологии, и не стеснялся слушать и воспринимать чужие идеи, а не следовать первоначальной концепции говнокода. Да, с тех пор почти весь код был переписан чуть менее чем полностью несколько раз, но это явно пошло ему на пользу.

А ты упираешься в тупиковый подход, и тупо отрицаешь все остальное. Ну, дело хозяйское.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018555
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UtoECat
Три месяца

Почему прописными буквами код пишешь?
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018577
loktevVasiliy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UtoECat
Я НАШЁЛ ТFILESTREAM


Нет, используй TMemoryStream (MemoryStream.LoadFromFile) А когда нужно сохранить в файл, делай MemoryStream.SaveToFile.

К нему же используй вдогонку TWriter с TReader.

Получишь самые быстрые сохранения
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018578
loktevVasiliy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно сразу всю структуру сохранять
https://github.com/KrystianBigaj/kblib
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018580
loktevVasiliy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
https://github.com/KrystianBigaj/kblib/tree/master/Demos/SpeedDemo

--- Save
Record count: 1000000
Allocating DB took 0,0028s
Fill DB took 0,1496s
Saving DB to TMemoryStream took 0,1154s
DB size 34,12MB
--- Load
Loading DB from TMemoryStream took 0,0851s
Record count: 1000000




А нужно ли быстрее? Нет.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018582
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
loktevVasiliy,

Спасибо. Учту.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018583
UtoECat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
loktevVasiliy, я всё-же своими ручками велосипед буду собирать.
...
Рейтинг: 0 / 0
Вопрос что лучше?
    #40018588
loktevVasiliy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UtoECat,

А оно тебе надо? Смотри, есть структура
Код: pascal
1.
2.
3.
4.
  TTestRecord = record
    Id, A, B, X, D: NativeUint;
    G, T, C: Double;
  end;



Мы выделяем массив record в количестве 5 000 000 элементов (Никогда столько в проекте сохранений - использоваться не будет)

--- Save
Record count: 5000000
Allocating DB took 0,1295s
Fill DB took 0,0870s
Saving DB to TMemoryStream took 0,1575s
DB size 228,88MB



На выходе, 228МБ файл, который был сохранён меньше чем за ПОЛ секунды.

А чтение за 0.2 секунды

--- Load
Loading DB from TMemoryStream took 0,2440s
Record count: 5000000



Код: 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.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
{ -----------------------------------------------------------------------------
  Unit Name: uMainForm
  Author:    Krystian Bigaj
  Date:      13-02-2011
  License:   MPL 1.1/GPL 2.0/LGPL 3.0
  EMail:     krystian.bigaj@gmail.com
  WWW:       http://code.google.com/p/kblib/

  Simple DB-like storage:
  ----------------------------------------------------------------------------- }

unit uMainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uKBDynamic, StdCtrls, Spin;

type

  { TTestRecord }

  TTestRecord = record
    Id, A, B, X, D: NativeUint;
    G, T, C: Double;
  end;

  { TTestTable }

  TTestTable = array of TTestRecord;

  { TTestDB }

  TTestDB = record
    TestTable: TTestTable;
  end;

  { TfrmMain }

  TfrmMain = class(TForm)
    btnSave: TButton;
    btnLoad: TButton;
    mLog: TMemo;
    seRecordCount: TSpinEdit;
    chkUTF8: TCheckBox;
    procedure btnSaveClick(Sender: TObject);
    procedure btnLoadClick(Sender: TObject);
  private
    FQPC, FQPCFreq: Int64;

    procedure QPCReset(S: String = '');
    procedure QPCLog(S: String);
    procedure Log(S: String; const A: array of const);
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.btnSaveClick(Sender: TObject);
var
  lDB: TTestDB;
  lIdx: Integer;
  lFile: TFileStream;
  lMemory: TMemoryStream;
  lOptions: TKBDynamicOptions;
begin
  Log('--- Save', []);
  lOptions := [];
  if chkUTF8.Checked then
    Include(lOptions, kdoUTF16ToUTF8);

  Log('Record count: %d', [seRecordCount.Value]);
  QPCReset;
  SetLength(lDB.TestTable, seRecordCount.Value);
  QPCLog('Allocating DB took');

  QPCReset;
  for lIdx := 0 to Length(lDB.TestTable) - 1 do
    with lDB.TestTable[lIdx] do
    begin
      Id := lIdx + 1;
      A := 24;
      B := 5454;
      X := 4564563453;
      D := 345645756858;

      G := 4.34563;
      T := 343.436345657;
      C := 45456;
    end;
  QPCLog('Fill DB took');

  lMemory := TMemoryStream.Create;
  try
    QPCReset;
    TKBDynamic.WriteTo(lMemory, lDB, TypeInfo(TTestDB), 1, lOptions);
    QPCLog('Saving DB to TMemoryStream took');
    Log('DB size %.2fMB', [lMemory.Size / 1024 / 1024]);

    lFile := TFileStream.Create('test.db', fmCreate);
    try
      lFile.CopyFrom(lMemory, 0);
    finally
      lFile.Free;
    end;
  finally
    lMemory.Free;
  end;

end;

procedure TfrmMain.btnLoadClick(Sender: TObject);
var
  lDB: TTestDB;
  lFile: TFileStream;
  lMemory: TMemoryStream;
begin
  Log('--- Load', []);

  lMemory := TMemoryStream.Create;
  try
    lFile := TFileStream.Create('test.db', fmOpenRead or fmShareDenyWrite);
    try
      lMemory.CopyFrom(lFile, 0);
    finally
      lFile.Free;
    end;
    lMemory.Position := 0;

    QPCReset;
    TKBDynamic.ReadFrom(lMemory, lDB, TypeInfo(TTestDB), 1);
    QPCLog('Loading DB from TMemoryStream took');
    Log('Record count: %d', [Length(lDB.TestTable)]);
  finally
    lMemory.Free;
  end;
end;

procedure TfrmMain.Log(S: String; const A: array of const);
begin
  mLog.Lines.Add(Format(S, A));
end;

procedure TfrmMain.QPCLog(S: String);
var
  lQPC, lQPCFreq: Int64;
begin
  QueryPerformanceCounter(lQPC);
  QueryPerformanceFrequency(lQPCFreq);
  if FQPCFreq <> lQPCFreq then
    Log('%d <> %d', [FQPCFreq, lQPCFreq]);

  Log('%s %.4fs', [S, (lQPC - FQPC) / FQPCFreq]);

end;

procedure TfrmMain.QPCReset(S: String);
begin
  if S <> '' then
    Log(S, []);

  QueryPerformanceFrequency(FQPCFreq);
  QueryPerformanceCounter(FQPC);
end;

end.

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


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