私はNodeJSがV8の上に構築されていることを知っています。そのため、v8のC++ラッパーがjsonファイル(2 Mb)を394秒で解析し、NodeJSスクリプトが同じjsonファイルを167秒で解析すると、それは非常に奇妙に見えます。 Cではv8からJSON :: Parseをなぜv8からNodeJS JSON :: parseよりもずっと遅くするのですか?
++私は、このよう
v8::MaybeLocal<v8::Value> jsonData = v8::JSON::Parse(isolate, v8::String::NewFromUtf8(isolate, data));
とNodeJS JSON.parse(data)
内で解析JSONを呼び出します。
はまた、私はこの
for (int i = 0; i < 1000; i++) {
v8::JSON::Parse(isolate, v8::String::NewFromUtf8(isolate, data));
}
それはすべて私の記憶を食べ、OOMキラーは私のアプリを殺すようにループ内でv8::JSON::Parse
を呼び出すとき。それがなぜこのように機能するのですか?おそらく、この関数にmemのリークが含まれているか、何かを解放する必要があります。
多くの感謝!
あなたの答えはThxです。 "返されたjsonsを再描画されたベクトルでチャンクして、パフォーマンスが上がるかどうかを確認してください。"私はそれが何を意味するのかを正確に理解していません。 –
まるで周りのように見えます。 C++の場合、無料で大量のメモリを消費します。しかし、NodeJSの場合、メモリは絶えず解放されます。 あなたはおそらくGCについて正しいかもしれませんが、動作しますが、私の場合のように、私はGCをC++で手動で呼び出してjsonデータを解放する必要があります。 –
v8 :: HandleScopeスコープを追加すると(分離);内部の見た目はうまくいくでしょう。 for(int i = 0; i <10000; i ++){ v8 :: HandleScopeスコープ(分離); v8 :: MaybeLocal jsonData = v8 :: JSON :: Parse(context、v8 :: String :: NewFromUtf8(isolate、data)); } –