Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
Разрабатываю "Игровой движок". Возникла необходимость сохранять все Игровые объекты на сцене. ИГРОВОЙ ОБЪЕКТ помимо стандартных данных содержит нетипизированный указатель. Можно использовать и просто список строк, но тогда будут проблемы по типу : необходимость символа разделителя, необходимость остальные форматы данных пихать в шлейф файлов тянущийся за списком строк и это всё вообще медленно... А юзание бд не на моём пути потому, что я не знаком с ними ВООБЩЕ (только приблизительная поверхностная обобщённая инфа), и мне кажется что для простого сохранения\загрузки бд - слишком круто;

Вопрос: Что лучше в данной ситуации : БД или список строк? Есть ли альтернатива всему этому, и тогда что с ней и как? И если лучше бд, то где блин найти как её быстренько подключить в 10.3 дельфине и общее кратенькое руководство, а запросы я где-нибудь уж точно сам откопаю.
[offtop]
p.s : блин я час писал целую статью, а на этапе отправления форум меня послал. Пришлось всё стирать и писать кратко и обобщённо.
p.p.s: я НЕ работаю программистом. Программирование лишь моё хобби
[/offtop]

Сообщение было отредактировано: 14 ноя 20, 18:30
14 ноя 20, 18:34    [22232108]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
Vizit0r
Member

Откуда: Одесса
Сообщений: 855
начни с хранения в TList.
14 ноя 20, 18:38    [22232110]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
Vizit0r#22232110 - начни с хранения в TList.
Можете пожалуйста привести весомые аргументы в пользу вашего выбора, т.к у меня тут выбор не на шутку и + я не хочу сильно костылить и хочу сделать максимально красивый и производительный код, насколько это позволительно для моего уровня.
P.S : почему сервер при присутствии в сообщении блоков цитаты и спойлера в квад
14 ноя 20, 18:47    [22232113]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
Vizit0r
Member

Откуда: Одесса
Сообщений: 855
потому что тебе этого хватит.
TDictionary, Tlist - для подавляющего большинства ненагруженных кешеров хватит с головой.
14 ноя 20, 19:12    [22232115]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
UtoECat,

json!
14 ноя 20, 19:20    [22232116]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
ъъъъъ#22232116]UtoECat, - json!
С таким успехом и XML можно. Всё же это лучше обычного списка строк, но хочется и побыстрее тоже...
14 ноя 20, 19:32    [22232117]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775
UtoECat
С таким успехом и XML можно. Всё же это лучше обычного списка строк, но хочется и
побыстрее тоже...

Это гораздо хуже, чем обычный список строк. Поэтому используй TList и даже не пытайся нарушать принцип KISS.
14 ноя 20, 19:39    [22232118]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
UtoECat,

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

А с чего ты решил, что нужно "побыстрее"? Ты уже что-то сделал, и все тормозит?
14 ноя 20, 19:40    [22232119]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
ъъъъъ,
нет я блин не могу отправить сообщение
14 ноя 20, 19:52    [22232122]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
Dimitry Sibiryakov,

лучше в плане реализации разделения. Оригинальный JSON юзать не буду, но подобное может быть
14 ноя 20, 19:54    [22232124]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
Vizit0r,

При чём тут TDictonary разъясните пожалуйста?
14 ноя 20, 19:54    [22232125]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
Vizit0r,
Похоже вы меня неправильно поняли. Мне нужно сохранить всё это дело В ФАЙЛ.
p.S: На форуме что лимит слов в сообщении около 50? Почему я не могу отправлять сообщения среднего (100-200 слов) размера?

Сообщение было отредактировано: 14 ноя 20, 19:56
14 ноя 20, 20:00    [22232126]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
UtoECat,

форум глючит.
14 ноя 20, 20:02    [22232127]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
>> При чём тут TDictonary разъясните пожалуйста?


Ты формируешь составной уникальный ключ и хранишь в общей "мусорке" все, что душе угодно с невообразимой скоростью записи и чтения.
И эта хрень легко сериализуется в текст вида "ключ=значение".
14 ноя 20, 20:06    [22232128]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
как вариант TStream тоже не плохо. это пока лучшая по производительности идея... Но это сложненько немного.. Да и это НЕ ИЗБАВИТ ОТ ШЛЕЙФА ФАЙЛОВ, но это быстрее json и string list вместе взятых думаю точно...
14 ноя 20, 20:11    [22232129]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
UtoECat
TStream тоже не плохо

шо?
14 ноя 20, 20:12    [22232130]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
ъъъъъ,

ааа... Ну это интереснее уже что-то... Но меня чёт на TStream несёт... Думаю, что если сейчас с TStream разберусь, то бахну и на нём, а иначе список строк и TDICTONARY
14 ноя 20, 20:15    [22232131]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

UtoECat
Мне нужно сохранить всё это дело В ФАЙЛ.

Тогда строки лучше всего. Лучше них только бинарный формат, но ты не осилишь.

Posted via ActualForum NNTP Server 1.5

14 ноя 20, 20:16    [22232132]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
ъъъъъ,

Файловый поток это... Вот : http://www.delphi-manual.ru/articles/stream.php
14 ноя 20, 20:16    [22232133]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775
UtoECat
если сейчас с TStream разберусь

Не надо. Текстовый файл проще в исполнении и отладке. Один объект - одна строка. Процедура сериализации объекта в строку (и обратно) - в самом объекте. Просто, надёжно, быстро. В самый раз для программистов-хоббитов.
14 ноя 20, 20:23    [22232137]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
UtoECat> Но меня чёт на TStream несёт...
Стрим - это просто абстракция, реализованная в классах. К твоему вопросу никакого отношения не имеет.
14 ноя 20, 20:30    [22232147]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
ъъъъъ,
TFileStream
14 ноя 20, 20:36    [22232151]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
Dimitry Sibiryakov, насчёт быстроты вашего варианта уж не знаю... Но я думаю, что TFileStream - сложный, но максимально экономный по эффективности вариант. Просто надо потренироваться. Да и если не выйдет тогда уж прибегну к строкам.
14 ноя 20, 20:38    [22232155]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
Dimitry Sibiryakov
UtoECat
если сейчас с TStream разберусь

Не надо. Текстовый файл проще в исполнении и отладке. Один объект - одна строка. Процедура сериализации объекта в строку (и обратно) - в самом объекте. Просто, надёжно, быстро. В самый раз для программистов-хоббитов.

[offtop]Так я и не хочу быть хоббитом :D Мне бы человеком хотя бы :D[/offtop]
14 ноя 20, 20:40    [22232156]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
UtoECat>TFileStream

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

Ты лучше о формате данных подумай.
14 ноя 20, 20:41    [22232157]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63960
Блог
UtoECat
Разрабатываю "Игровой движок". Возникла необходимость сохранять все Игровые объекты на сцене. ИГРОВОЙ ОБЪЕКТ помимо стандартных данных содержит нетипизированный указатель.

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

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

Скажем так, тащить в проект лишнюю сущность незачем. БД не исправит ошибок, допущенных при проектировании.
14 ноя 20, 20:44    [22232158]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
*удалено

Сообщение было отредактировано: 14 ноя 20, 21:05
14 ноя 20, 21:07    [22232161]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

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

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

Posted via ActualForum NNTP Server 1.5

14 ноя 20, 21:12    [22232162]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
Dimitry Sibiryakov

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

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

Нужно двигаться к максимально возможно эффективному и хорошему... На простом далеко не ускачешь.
15 ноя 20, 00:39    [22232227]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
UtoECat
Dimitry Sibiryakov

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

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

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

Тебе говорят, что делать, а ты какую-то хрень несёшь. Зачем спрашиваешь тогда?
15 ноя 20, 00:50    [22232230]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
softwarer

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

1. ООП - зло, если будет использоваться слишком часто. Думаю вы это понимаете. 2 . С ООП как с концепцией я знаком хорошо, т.к первые шаги в программировании делал на C#. И с его синтаксисом и функционалом в дельфи соответственно тоже.
3.Что-ж вы сами это попросили. Мой движок представляет из себя средство по обеспечению хранения, доступа к ИГРОВЫМ ОБЪЕКТАМ ( ЭТО НЕ ООП!!!) , обеспечивает возможность взаимодействия объектов друг с другом и взаимодействие пользователя с ними соответственно, способ установки и контроля поведения объектов, а так-же обеспечивает (по крайней мере должен будет в будущем) обеспечивать оптимизацию алгоритмов происходящих под капотом.
Движок я уже переписываю третий раз и в основном это я делал для достижения более удобного и красивого распределения кода по юнитам и исправлению ошибок, а так-же для добавления в будущем новой системы присвоения и выборке текстур.
Движок использует для отрисовки игрового пространства библиотеку OpenGL и в будущем будет поддерживать работу со звуком через bass.dll .
Игровой объект , это рекорд тип . Пока он реализован так :
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;

Функционал объектов, их отрисовка и прочее устанавливается объектом родителем. В объекте указан индекс родителя в МАССИВЕ РОДИТЕЛЕЙ. Сам родитель - абстрактный класс. Его финальная реализация (+\-)
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 модулях движка, где дописываю код, т.к сел переписывать буквально неделю назад ( когда компилятор запутался в моём коде в прямом смысле этого слова)

Сообщение было отредактировано: 15 ноя 20, 01:02
15 ноя 20, 00:59    [22232232]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
ъъъъъ,

Я же сказал, что уже решил как делать ! Сначала тесану TFILESTREAM, а если не выйдет, то уж ваши строки буду юзать.
15 ноя 20, 01:01    [22232234]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63960
Блог
UtoECat
Нужно двигаться к максимально возможно эффективному

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

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

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

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

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

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

Теперь объясните, какая разница, куда пихать результат метода objSAVE - в стрим, в текстовый файл или в БД? Исходный вопрос продолжает быть актуальным?
15 ноя 20, 05:35    [22232258]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
rgreat
Member

Откуда:
Сообщений: 6312
Да уж. Тяжело новичку в этом обществе старых троллей.
15 ноя 20, 05:54    [22232259]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1975
"новичок" случаем не такой же старый тролль?
15 ноя 20, 08:11    [22232264]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
Vizit0r
Member

Откуда: Одесса
Сообщений: 855
Дегтярев Евгений
"новичок" случаем не такой же старый тролль?


тут вобщем-то 2 варианта - или от еще старее и толще, либо самое время начинать разбивать лицо в кровь ладонями, раз он пишет такое серьезно.
15 ноя 20, 09:32    [22232273]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
L1G
Member

Откуда:
Сообщений: 141
UtoECat, превращение объекта или целого дерева объектов в то, что можно записать в файл называется сериализация и есть много готовых решений для этого.
Я бы сначала рассмотрел возможность использовать встроенные средства Delphi (для формирования DFM, есть бинарный и текстовый варианты).
Древняя статья: https://rsdn.org/article/delphi/serialization.xml
15 ноя 20, 12:02    [22232292]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
L1G,

нет у него объектов, которые классы.
Рекорды у него, смотри его последнее сообщение.
Вообще непонятно, что он хочет.
15 ноя 20, 12:13    [22232297]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
Дегтярев Евгений
"новичок" случаем не такой же старый тролль?

Кодит, похоже, на терминале ЕС - 7927: нижний регистр символов отсутствует...
15 ноя 20, 12:22    [22232302]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63960
Блог
ъъъъъ
Вообще непонятно, что он хочет.

Как раз вполне понятно. Во-первых, он откопал какую-нибудь книгу конца девяностых типа "Секреты программирования игр" (помнится, выходила такая в издательстве "Питер" с примерно таким же содержимым). Во-вторых, раскопал какое-нибудь доисторическое говно типа KOL и решил, что это очень круто. Теперь пытается скрестить ежа с ужом кривыми руками, дабы получить немерянный рулез.
15 ноя 20, 12:37    [22232310]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 459
Капсовый код, о майн готт...
15 ноя 20, 13:14    [22232320]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
softwarer,
1.А разве учиться на ошибках это плохо?
2. Я понимаю что такое указатели и массив родителей нужен для упрощения процесса сохранения
3. Данная тема закрыта
4. Не надо устраивать срач. Я же вас не заставляю использовать то, что я делаю, верно? Мой проект держится лишь на шестилетнем интузиазме и делается для собственного пользования и всю эту ох какую историю я рассказывать не буду.
15 ноя 20, 13:37    [22232328]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
softwarer,

1.Хотел бахнуть я вообще-то сначала на С++, но меня мой знакомый уговорил на дельфи.
2. Я не совсем новичок.Первые вообще успехи я делал в ... А собственно не важно где.
3. Вопрос закрыт. Я опять же ЗАБЫЛ ПРО TFILESTREAM, потому что 1. Устал 2. Я про него мало чего читал.
4. Большая
15 ноя 20, 13:45    [22232331]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
Vizit0r,
Softwarer, книги тут не причём. Это полностью самостоятельно придуманная концепция.
15 ноя 20, 13:50    [22232334]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63960
Блог
UtoECat
1.А разве учиться на ошибках это плохо?

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

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

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

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

То есть, после шести лет работы и троекратного переписывания Вы задаёте такие вопросы и продолжаете быть уверены, что всё делаете правильно?
15 ноя 20, 13:52    [22232338]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

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

Откуда: Одесса
Сообщений: 855
UtoECat
т.е владею всеми основными понятиями ( только кроме дженериков, т.к посчитал их пока ненужными)

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

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

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

А ты упираешься в тупиковый подход, и тупо отрицаешь все остальное. Ну, дело хозяйское.
15 ноя 20, 18:19    [22232419]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
UtoECat
Три месяца

Почему прописными буквами код пишешь?
15 ноя 20, 18:27    [22232422]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
loktevVasiliy
Member

Откуда:
Сообщений: 11
UtoECat
Я НАШЁЛ ТFILESTREAM


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

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

Получишь самые быстрые сохранения
15 ноя 20, 20:57    [22232464]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
loktevVasiliy
Member

Откуда:
Сообщений: 11
А можно сразу всю структуру сохранять
https://github.com/KrystianBigaj/kblib
15 ноя 20, 21:01    [22232467]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
loktevVasiliy
Member

Откуда:
Сообщений: 11
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




А нужно ли быстрее? Нет.

Сообщение было отредактировано: 15 ноя 20, 21:00
15 ноя 20, 21:05    [22232470]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
loktevVasiliy,

Спасибо. Учту.
15 ноя 20, 21:10    [22232472]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
UtoECat
Member

Откуда:
Сообщений: 42
loktevVasiliy, я всё-же своими ручками велосипед буду собирать.
15 ноя 20, 21:11    [22232473]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос что лучше?  [new]
loktevVasiliy
Member

Откуда:
Сообщений: 11
UtoECat,

А оно тебе надо? Смотри, есть структура
  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



+
{ -----------------------------------------------------------------------------
  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.
15 ноя 20, 21:17    [22232479]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / Delphi Ответить