Держать Json handle всю карту

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Имеем json конфиг с 300 кастомными пушками с различными свойствами типа дамага, скинов и так далее.
На сколько вообще правильно держать открытым json_parse handle на протяжении всей карты, если обращение к ней будет каждый коннект и каждое открытие меню
Стоит ли переводить этот конфиг в array и trie массивы и что быстрее извлекается из данных json-data или array/trie данные?
 
Сообщения
29
Реакции
4
Помог
2 раз(а)
Javekson, Резонно держать всю карту открытым, ибо при постоянных новых открытиях, нагрузка будет намного больше, чем он просто открыт вечно. Тоже самое с данными json-data, они и созданы для него, поэтому открываются и извлекаются намного быстрее чем array.
 
Сообщения
91
Реакции
141
Помог
1 раз(а)
А в чем проблема все таки изначально было записать в Array / Trie?
Trie будет по лучше конечно же, чем Array, так как тебе придется каждый раз его дергать полностью по его айдишнику, а так по ключу через Trie быстрее будет.
Можешь попробовать это использовать - https://github.com/nikolaygaus/amxx-entity-prefub
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
А в чем проблема все таки изначально было записать в Array / Trie?
проблемы нету, вопрос в другом был
30 Мар 2022
поэтому открываются и извлекаются намного быстрее чем array.
это и нужно было узнать, если это конечно правда, ибо хз как протестить :D
30 Мар 2022
t3rkecorejz, вопрос в том, стоит ли json кфг дублировать в array/trie для дальнейшей работы уже с массивами, что бы не держать открытым json и что будет быстрее array and trie or json, как я понимаю json_parse парсит данные в те же самые массивы, но не уверен в этом
 
Сообщения
29
Реакции
4
Помог
2 раз(а)
Javekson, Метод JSON.parse() разбирает строку JSON, возможно с преобразованием получаемого в процессе разбора значения.
 
Сообщения
91
Реакции
141
Помог
1 раз(а)
@t3rkecorejz, вопрос в том, стоит ли json кфг дублировать в array/trie для дальнейшей работы уже с массивами, что бы не держать открытым json и что будет быстрее array and trie or json, как я понимаю json_parse парсит данные в те же самые массивы, но не уверен в этом
Стоит, ты же не меняешь значения в этом json'e, верно? А каждый раз обращаться к json'у и его парсить гиблое дело, больше памяти выделяется под это, а так, у тебя сразу же все данные будут записаны и тебе к ним нужно будет обратиться по его айди или ключу, все.
При старте карты парсишь, записываешь все в trie/array и дестроишь json (json_free)
это и нужно было узнать, если это конечно правда, ибо хз как протестить :D
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
t3rkecorejz, я каждый раз не делаю парс конфига, это делается один раз при старте карты и хранится хендлер уже готовых json данных, просто я могу закрыть его и продублировать данные в массивы или же не делать массивы а просто в течении карты постоянно обращаться к json данным, а json_free делать в конце карты уже соответственно.
 
Сообщения
29
Реакции
4
Помог
2 раз(а)
Javekson, Для теста сделай json и trie и через Profiler запусти их. Так ты ответишь на свой вопрос. А для простоты проще же оставить всё в json.
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
l0rdaer0n, не знаю на сколько правильно я заюзал этот профайлер
Код:
    ep_start( );
    TrieGetString( g_tTest, "weapon", buffer, charsmax( buffer ) );
    server_print( "%.17f", ep_end( ) );
    
    ep_start( );
    json_object_get_string( jTest, "weapon", buffer, charsmax( buffer ) );
    server_print( "%.17f", ep_end( ) );
    
    ep_start( );
    ArrayGetString( g_aTest, 0, buffer, charsmax( buffer ) );
    server_print( "%.17f", ep_end( ) );
Тестанул раз ~15 сейчас уже, первые цифры одинаковые, редко меняются, меняется часто хвост только
Результат по извлечению строковых данных
0.00000083078646100
0.00000053178644000
0.00000023078644000
На удивление аррай получил быстрее данные
30 Мар 2022
l0rdaer0n, а вообще я зыбал упоминуть, в конфиге 300 пушек, но юзаться будут не все, допустим только 50 купленных пушек, получается остальные 250 будут просто без дела висеть в памяти, в принципе не сильно страшно, но тем не менее, а так да, пожалуй соглашусь, работать с хенедлером json будет удобнее
 
Сообщения
91
Реакции
141
Помог
1 раз(а)
ep_start( ); ArrayGetString( g_aTest, 0, buffer, charsmax( buffer ) ); server_print( "%.17f", ep_end( ) );
но тебе то нужно будет получить из Array строку, но для этого тебе нужно будет найти еще нужный индекс, то есть это еще ArrayFindValue/String, ты же в случае с json/trie ищешь по string "weapon", а в Array ты сразу же указал индекс, с которого считать, но тебе нужен будет ArrayFind, а это еще время, вот вместе с ним и расчитывай время
 
Последнее редактирование:
Сообщения
494
Реакции
341
Помог
11 раз(а)
На сколько вообще правильно держать открытым json_parse handle на протяжении всей карты, если обращение к ней будет каждый коннект и каждое открытие меню
Тут вообще две стороны монеты - что хочешь сберечь: ресурсы ЦП или - ОЗУ. Лучше беречь ЦП, ибо данных относительно не так много, поэтому хранить данные всю карту будет лучше. Опять же при оговорке, что тебе не нужно беречь память ОЗУшки, если её достаточное количество.
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
Javekson, я бы предложил с точки зрения архитектуры использовать, так как было задумано, json для парсинга данных из файла, Array для хранения в ран-тайме. Через Трие можно составить иднексы для Арий шобы было "супер быстро". Отвечая на вопрос темы - если не боишься потерять указатель, то можно.
 
Сообщения
29
Реакции
4
Помог
2 раз(а)
Javekson, Для array нужно ещё пару индексов, которые и накинут время. Выигрышным оказывается json. Так и получается, что лучше использовать всю карту и json-data.
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
l0rdaer0n, через индексы быстрее, чем искать, тем более по строке.
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
fl0wer, в trie придётся хранить несколько индексов на аррай, ибо у игрока может быть несколько пух, вопрос в каком формате хранить это значение, так или иначе придётся потом парсить это значение для построение меню. Либо создавать для каждого игрока свой аррай, хз что будет лучше
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу