2012-07-25 3 views
5

Ich bin neu bei WCF Services.So optimieren Sie einen WCF-Dienst für eine bessere Leistung mit ServiceThrottling

Wir haben einen Dienst, der auf einen MSMQ hört. maxConcurrentInstances und maxConcurrentSessions wird für den Dienst auf 1 gesetzt. Ergebnis viele Nachrichten in der Warteschlange und Nachrichten werden langsam bedient.

Was ist der Unterschied zwischen maxConcurrentInstances und MaxConcurrentSessions Attribute im serviceThrottling Elemente.

Momentan dauert es 10 Minuten, 120 Nachrichten zu bedienen, was sehr langsam ist.

Was sollte der ideale Wert sein, um die Leistung des Dienstes zu verbessern.

Vielen Dank im Voraus

Antwort

4

maxConcurrentInstances: Maximale Anzahl von Instanzen der Service-Klasse, die Anforderungen zur gleichen Zeit unabhängig von dem Gleichzeitigkeit Modus und Instanz-Kontext-Modus dienen kann.

maxConcurrentSessions: Maximale Anzahl gleichzeitig aktiver WCF-Sitzungen.


den Parallelitätsmodus Angenommen wird zu NO multithreading eingestellt.

IF Instance context mode = Per session 
    THEN Max number of requests processed in parallel = Min(maxConcurrentInstances, maxConcurrentSessions) 

IF Instance context mode = Per call 
    THEN Max number of requests processed in parallel = maxConcurrentInstances 

IF Instance context mode = Single 
    THEN Max number of requests processed in parallel = 1 

Unter der Annahme, dass die Parallelität Modus multithreading eingestellt ist.

Eine einzelne Instanz kann jetzt mehrere Anfragen verarbeiten, aber Sie müssen sich um die Nebenläufigkeitsprobleme kümmern.


Die wichtige Frage ist: wie wählen Sie die Instanz-Kontext-Modus?

  • Sie nicht sicher sind, mit Multi-Thread-Programmierung: halten Sie sich an PerSession oder PerCall
  • Sie müssen zwischen den Anrufen vom gleichen Client auf der Service-Ebene keine Daten halten: PerSession vermeiden
  • Das Erstellen einer neuen Instanz des Dienstes ist sehr kostspielig: Verwenden Sie Single, aber bereiten Sie sich darauf vor, mit Nebenläufigkeitsproblemen umzugehen.

Danach ist es eine Frage der Optimierung der maximalen Anzahl von Instanzen (für PerCall) und Sitzungen (für PerSession). Normalerweise beginnt man mit einer willkürlichen Zahl wie 100 und sieht, ob es schneller wird. Wenn ja, dann gut. Wenn nicht, überprüfen Sie, ob Ihre Instanzen schnell genug erstellt werden können.

Verwandte Themen