SNIReadSyncOverAsync und WaitForSingleObject blockieren die EF-Leistung?

Ich mache ein Profiling für einen WCF-Dienst, der EF (System.Data.Entities) verwendet, um aus einer SQL-Datenbank zu lesen. Wenn ich mehrere parallele Clients hochfahre, die den Dienst in Anspruch nehmen, werden die CPUs alle zu 100% ausgelastet, die Leistung wird im Allgemeinen gedrosselt und alles versagt.

Bei der Profilerstellung mit dem Concurrency-Profiler stellte ich fest, dass 85% der Zeit für die Synchronisierung aufgewendet wurden, wobei nur etwa 4% die eigentliche Codeausführung waren. Ein tieferer Blick in die Stapelablaufverfolgung zeigt, dass der größte Teil der Synchronisierung auf einen Aufruf von WaitForSingleObject in System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync zurückzuführen ist. Der Stack zeigt, dass der Aufruf an einen nativen Methodenwrapper geht und dann bei kernel32.dll! _WaitForSingleObject endet.

Hat das schon jemand erlebt? Gibt es eine Möglichkeit, etwas dagegen zu unternehmen? Ich bin nicht wirklich absurde Last auf diese, nur etwa 20 parallele Clients werfen, und es ist alles schreibgeschützt, so bin ich überrascht, die Threads würden sich sogar die Mühe machen, zu synchronisieren.

Ich kämpfe jetzt seit einer Woche damit und kann es einfach nicht erklären. Jede Hilfe wäre dankbar!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage