Я знаю, что NodeJS построен поверх V8. Вот почему это выглядит так странно, когда моя оболочка c ++ вокруг v8 анализирует файл json (2 Мб) за 394 секунды, а сценарии NodeJS анализируют тот же файл json за 167 секунд.
В C ++ я так называю parse json
v8::MaybeLocal<v8::Value> jsonData = v8::JSON::Parse(isolate, v8::String::NewFromUtf8(isolate, data));
и в NodeJS JSON.parse(data)
,
Также, когда я звоню v8::JSON::Parse
в такой петле
for (int i = 0; i < 1000; i++) {
v8::JSON::Parse(isolate, v8::String::NewFromUtf8(isolate, data));
}
он съедает всю мою память, а OOM Killer убивает мое приложение. Почему это работает таким образом? Может быть, эта функция содержит утечки памяти или мне нужно что-то освободить.
Большое спасибо!
Могу только поспорить, что в чистом использовании v8 json, возвращенный из ‘JSON :: parse’, сразу уничтожается, тогда как в node.js он собирает мусор либо асинхронно, либо вне цикла. Попробуйте разделить возвращенные файлы jsons на восстановленный вектор и посмотрите, повысится ли производительность.
Других решений пока нет …