2012-01-19 11 views
5

ASP.NET MVCアプリケーションをプロファイリングしていて、IISでローカルバージョンを取得したときに、約77kbのオブジェクトのデシリアライズに約100msかかることがわかりましたか?json.netのパフォーマンスが77kbのjson文字列

また、IMプロファイリング中にCPUが最大限に見える、非常に強烈なデシリアライズのタスクですか、それとも別の場所で見たいのですか?

ご協力いただきありがとうございます。

+0

あなたはいつもjson.netとプロファイルのソースを入手して、とても集中的なものを見ることができます。 –

+0

私はVSプロファイラを使っていくつかのサンプリングを行いましたが、サンプリングの最大量は 'JsonConvert.DeserializeObject'と思われます – Mark

答えて

2

通常、オブジェクトの複雑さはデシリアライズに関して大きな役割を果たします。再帰的なパターンで子オブジェクトを含むオブジェクトは、正しく解析するためにCPUとメモリを消費します。

単純な名前:値が名前:値の別のマップ(オブジェクト)である場合、値マップははるかに複雑になります。このような再帰が行われている場合、JSONを非正規化(Name:[primitive] Value)することで、システムが解析しやすくなります。

MVC(rdbmsデータ)に対する非正規化は少し難しいかもしれません。多くの場合、多対多の関係を平坦化することは実現可能ではありません。

JSON.netと組み込みのJavaScriptSerializerを比較して、改善が得られるかどうかを確認できます。

0

ある時点で、JSON.NETを含むいくつかのシリアライゼーションフレームワークがReflectionを活用しているため、オブジェクトは脱直列化するのが面倒になります。また、オブジェクトのサイズが85KBに達すると、すぐにガベージ・コレクタによってラージ・オブジェクト・ヒープにプッシュされ、パフォーマンスに影響します。

パフォーマンスを向上させ、メモリのボトルネックを避けるために、パフォーマンスの点で.NETのJSONパーサーであるJSON#を使用することをお勧めします。

関連する問題