2010-12-15 21 views
9

Hızlı Geçmiş: HTTPListener'ın sözde büyük bir performans sergilediği http.sys çekirdek sürücüsünü kullandığını anlıyorum. Ancak, yönetilen bir http sunucusu ile yerel bir vC++ sunucusu arasında bazı performans kriterleri yaparken, yerel tarafta yaklaşık 15 MB/s artış görüyorum. Test kurulumu, 1gb nics ile yeni formatlanmış iki laboratuvar makinesidir. Yerli tarafında yaklaşık 100 MB/s olan ve yaklaşık% 95'e yakın olan HTTPListener kullanırken ~ 94 MB/s (max 100) görüyorum.HTTPListener vs Yerel HTTP performansı

testler

  • hem

    aynı yükü (~ 120 mb) Ben devre dışı bıraktık Yönetilen için her iki sunucuyu
  • test etmek için aynı yönetilen müşteri uygulamasını kullanıyorum
  • göndermek, elma için elma vardır Nagle (Ama her iki yolu da test ettik, sonuç aynı)
  • Bir grup test çalıştırıyorum ve iş hacmini hesapladım, ilginç not, Yönetilen std sapmanın daha yüksek olması, yani sonuçların yerel ile karşılaştırıldığında tutarlı olmamasıdır.

Genel olarak, HTTPListener aracılığıyla yerel sunucunun 110 MB/sn'lerine yaklaşabilmem gerektiğini umuyorum, 15 MB/sn oldukça maliyetli görünüyor.

Sorular: 1. Eksik olduğum yönetilen başka optimizasyonlar var mı? 2. Potansiyel darboğazlar nelerdir, reflektör üzerinden HTTPResponseStream'e baktım, bazı marşlama devam ediyor gibi görünüyor, ama göze batan sorun yok, Aslında yığınlama kullanıldığında, yerel sunucumla aynı bir yığın dizisi üretiyor.

herhangi bir fikir takdir edilmektedir,

+0

Hangi API'ları C++ uygulamanızı geliştirdiniz? –

+0

Yönetilen uygulama için daha yüksek sapma, çöp toplama nedeniyle olabilir? Çok sayıda nesne oluşturuyorsunuz/terk ediyor musunuz? –

+1

"HttpListener" sınıfı HTTP.SYS kullanıyor kim? IIS yapar ama değil HttpListener ', aslında eğer ilginç olurdu. Bu yüzden, inanırsanız, lütfen referansı sağlayın. – Aliostad

cevap

1

bir yerli-to-yönetilen geçiş olmadığı anlamına gelmez Http.sys kullandığı gerçeği. Yukarıdaki MSDN makalesinden:

HTTP.sys, bağlantı yönetimi, bant genişliği daraltma ve Web sunucusu günlüğü kaydetme sağlar. Yönetilen kod çalıştıran gerçeği sayesinde

, sen Hiçbir zaman kadar hızlı olacak vs. birlikte çalışma (yönetilen özgü, COM birlikte karıştırılmamalıdır), sahip çöp toplama, var saf bir yerli C++ uygulaması.

DÜZENLEME: Bunu daha net hale getirmek için, hala bir .NET işlemi çalıştırıyorsunuz, kullanıcı modunda değil, çekirdek modunda IIS'ye giriyorsunuz. Bunun harika bir makalesi: http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp

İlgili konular