2012-01-05 14 views
6

WCF ve MSMQ kullanarak bir kavram kanıtı üzerinde çalışıyorum. Varsayılan olarak This Article varsayılanlarını kullanarak gaz ayarlarıyla oynuyorum ve ayrıca kendi ayarlarınızı yapılandırma dosyasına ekliyorum. Bu uygulamayı çalıştıran 2 adet Quad Core Xeon işlemciye sahibim. Hangi ayarları uygulamam olursa olsun, her seferinde yalnızca bir seferde 8 mesaj aldım (İşlem çekirdeklerimle eşleşen). İletilerin her birinin tek bir işlemde ele alınmasını istiyorum, böylece sorunun bir parçası olabilir ... emin değilim. Sanırım çok daha fazla mesajı eşzamanlı olarak ele alacağını düşündüm.WCF Gaz Kelebeği Ayarları

Servis Davranışı:

[ServiceBehavior(UseSynchronizationContext = true, 
        ReleaseServiceInstanceOnTransactionComplete=true, 
        ConcurrencyMode = ConcurrencyMode.Single, 
        InstanceContextMode = InstanceContextMode.PerCall)] 

Son nokta Davranış:

<endpointBehaviors> 
    <behavior name="endpointBehavior"> 
     <transactedBatching maxBatchSize="1" /> 
    </behavior> 
    </endpointBehaviors> 

Kendi Hizmet Throttling:

<serviceThrottling maxConcurrentCalls="128" maxConcurrentSessions="800" /> 

şey bakan muyum? Belki de sadece varsayılan/özel gaz ayarını tam olarak anlamıyorum (muhtemelen).

Ben ReleaseServiceInstanceOnTransactionComplete ayarının yanı sıra (Çoklu değiştirildi) ConcurrencyMode değiştirdiniz

DÜZENLEME. Çoklu'ye geçmek bir şeyi değiştirmedi mi?

EDIT Belki TransactionBatch ayarı mı? Bunu bir tane ayarladım ...

sayesinde

S

+0

Bu tek iş parçacıklı değil mi? –

+0

Merhaba @JohnBreakwell Eşzamanlılık modunu Çoklu olarak değiştirdim ve aynı sonuçları gerçekleştiriyor gibi görünüyor muyum? – scarpacci

cevap

4

WCF azaltma/performans üzerinde bazı iyi belgelere işaret beni bir blog buldum. İşleme uygulamam için biraz daha fazla meta çıktı ekledim ve aradığım performansı elde edebildim. Sürecima (ManagedThreadID, vb.) Daha fazla bilgi eklediğimde, orijinal olarak varsaydığımdan çok daha fazla iş çıkardığımı görebiliyordum. Ayrıca, aşağıdaki blogda yer alan bazı ipuçlarını faydalı buldum.

Blog

sayesinde

S

0

Eğer PerCall sen MaxConcurrentInstances artmalıdır örneklilik çalıştıran beri. .Net 4'te bile, varsayılan değer 26'dır. 4.5 "Varsayılan, MaxConcurrentSessions varsayılan değeri ve varsayılan değer MaxConcurrentCalls toplamıdır."

BTW ... WCF, birden çok iş parçacığındaki örneğinize çağrı yapar. InstanceContextMode.PerCall kullanmadığınız sürece. InstanceContextMode.PerCall + Herhangi bir ConcurrencyMode = N N hizmet örnekleri üzerinde N eşzamanlı çağrışımları, burada N hizmet gazı tarafından belirlenir N, Reference

+0

PerCall/Single thread hakkında söylediklerini yanlış düşünüyorum. Tüm servis örnekleri aynı iş parçacığı üzerinde oluşturulacak ve böylece eşzamanlı olarak yürütülecektir. [Burada görüntülenen ekran görüntüsü] 'nde kendiniz görebilirsiniz (http://www.codeproject.com/KB/WCF/WCFConcurrency.aspx#Instance modu = Arama ve Concurrency = Çoklu).Bu blog yazısı çok faydalı ve okumaya değer. –

+0

hmmmmmm Sadece yorumumun sonunda bu referanstaki ifadeleri zikzak ediyordum. – felickz