2009-04-07 6 views
0

J'essaie de créer un service Web ASP.NET que je peux utiliser pour montrer la différence entre l'implémentation d'une méthode Web de manière asynchrone par rapport à synchrone. C'est en quelque sorte une preuve de concept que je peux utiliser pour montrer comment écrire des choses de manière asynchrone peut rendre une application plus évolutive. Pour faire la comparaison, j'ai implémenté deux méthodes, RunSqlSync et RunSqlAsync. Comme ceci:IIS ou ASP.NET effectue-t-il une sorte de limitation de la connexion?

[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) 
{ 

} 

Je pense que je serais en mesure de traiter les demandes plus simultanées en utilisant la version Async des méthodes, en particulier si l'appel SQL a pris un certain temps. Malheureusement, pour les deux méthodes, il semble que j'atteins une limite de demande/s (la limite dépend de la latence des appels SQL) et je ne suis même pas proche de maximiser mon CPU. Lorsque j'augmente le nombre de demandes envoyées au service Web (en augmentant le nombre d'utilisateurs utilisant mon test de charge Ocracoke), le temps de réponse moyen augmente simplement sans changer le débit TPS réel. J'ai instrumenté le service Web en interne pour mesurer le temps nécessaire à la réalisation d'une demande, et dans mon code, chaque demande individuelle est traitée en même temps, quelle que soit la charge. Cela me fait penser que ASP.NET est en quelque sorte étranglement. Est-ce que quelqu'un sait pourquoi cela arriverait?

Répondre

2

Vous pouvez définir la taille maximale du pool dans l'appel de chaîne de connexion .net sql. Je crois que la valeur par défaut est 20 connexions max donc si vous frappez cela, alors cela permettrait seulement à ceux-ci d'être utilisés et essentiellement vous obtiendriez les mêmes résultats. Voici un article sur la mise en commun des connexions.

http://www.15seconds.com/Issue/040830.htm

+1

Dans .NET 4.0/4.5, la valeur par défaut Max Pool Size est 100. – RickNZ

+0

ce lien est mort –

1

Comme schwig dit, vous n'êtes probablement pas en cours d'exécution dans une limitation de bande passante, vous êtes probablement à court de threads de travail dans votre processus. Voici le chapitre que vous devriez lire à partir de MS que je trouve être instructif:

http://msdn.microsoft.com/en-us/library/ms998549.aspx

Questions connexes