(System.Data.Entities)
EF を使用して SQL DB から読み取るWCF サービスでプロファイリングを行っています。サービスにヒットする複数の並列クライアントをスピンアップすると、CPU はすべて 100% になり、パフォーマンスは一般的に低下し、すべてが停滞します。
これを同時実行プロファイラーでプロファイリングすると、時間の 85% が同期に費やされ、実際のコード実行は約 4% にすぎないことがわかりました。スタック トレースを詳しく調べると、ほとんどの同期はWaitForSingleObject
inへの呼び出しによるものと思われますSystem.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync
。スタックは、呼び出しがネイティブ メソッド ラッパーに送られ、 で終了することを示していますkernel32.dll!_WaitForSingleObject
。
誰もこれを経験したことがありますか?これについて何かする方法はありますか?私は実際にこれにばかげた負荷をかけているわけではなく、約 20 の並列クライアントしかなく、すべて読み取り専用であるため、スレッドがわざわざ同期することさえあることに驚いています。
私はこれと1週間戦ってきましたが、説明することはできません. どんな助けでも大歓迎です!