Ich versuche, einen ASP.NET-Webdienst zu erstellen, mit dem ich den Unterschied zwischen der asynchronen oder der asynchronen Implementierung einer Webmethode anzeigen kann. Es ist eine Art Proof-of-Concept, mit dem ich zeigen kann, wie das asynchrone Schreiben von Dingen eine App skalierbarer macht. Um den Vergleich durchzuführen, habe ich zwei Methoden implementiert: RunSqlSync und RunSqlAsync. Wie folgt aus:Führt IIS oder ASP.NET irgendeine Art von Verbindungsdrosselung durch?
[WebMethod]
public int RunSqlSync(string sql)
{
// call SQL synchronously
}
[WebMethod]
public IAsyncResult BeginRunSqlAsync(string sql, AsyncCallback callback, object state)
{
// call SQL asynchronously
}
[WebMethod]
public int EndRunSqlAsync(IAsyncResult result)
{
}
Ich würde erwarten, dass ich mehr gleichzeitigen Anfragen zu verarbeiten, wäre in der Lage durch die Async-Version der Methoden verwenden, vor allem, wenn der SQL-Aufruf eine Weile dauerte. Leider scheint es für beide Methoden so zu sein, dass ich ein Limit von Request/Sec (das Limit hängt von der Latenz der SQL-Aufrufe) erreicht habe und ich bin nicht einmal annähernd dabei, meine CPU zu maximieren. Wenn ich die Anzahl der Anforderungen, die an den Web-Service gesendet werden, erhöhe (indem ich die Anzahl der Benutzer in meinem Ocracoke Load Test erhöht), steigt die durchschnittliche Antwortzeit nur an, ohne den tatsächlichen TPS-Durchsatz zu ändern. Ich habe den Web Service intern instrumentiert, um die Zeit zu messen, die für die Ausführung einer Anfrage benötigt wird, und innerhalb meines Codes wird jede einzelne Anfrage unabhängig von der Last zur gleichen Zeit bearbeitet. Das lässt mich denken, dass ASP.NET irgendwie Drosselung ist. Weiß jemand, warum das passieren würde?
In .NET 4.0/4.5, die Standard-Max Pool Size ist 100. – RickNZ
Link tot ist jetzt –