1

非常に複雑なエンティティを持つプロジェクトに取り組んでいます。オブジェクト グラフには、2 つのレベルを持つツリーに約 30 個のオブジェクトが含まれます (子の子があります)。

エンティティはブラウザーで管理され、Json として Web API エンドポイントに送信されます。エンドポイントは JSON を複雑なエンティティにシリアル化し、リポジトリは GraphDiff を使用してエンティティを保存します。

最初の保存では、UpdateGraph の呼び出しに約 12 秒かかり、同じエンティティに対する後続の呼び出しでは数ミリ秒かかります。

EF DbContext のエンティティごとにグラフがキャッシュされていると仮定します。

最初の呼び出しを最適化する方法はありますか? GraphDiff を使用している場合、いくつかのシナリオしかありません。アプリケーションで使用されるグラフを準備する方法があるかもしれません。

ご協力ありがとうございました。

4

1 に答える 1

2

GitHub から GraphDiff ソース コードを複製して変更することで解決しました。

GraphDiff はエンティティのキ​​ーを動的に検出します。また、既に永続化されているオブジェクトを取得するために動的クエリ式が生成される方法により、新しいエンティティ (別の主キー) がクエリに使用されるたびに式が EF によって再コンパイルされます。そのため、エンティティ キーが以前に使用された場合にのみ、コンパイルされたクエリはキャッシュされません。私の場合、これらのクエリのコンパイルには多くの時間がかかりました (10 秒)。

ソース コードが変更され、既に永続化されているエンティティを挿入できるようになりました。これは、GrahpDiff に DB からエンティティを取得させる代わりに、エンティティを最適な方法で取得し、GrahpDiff にマージするために挿入されたことを意味します。

于 2014-12-18T06:44:11.413 に答える