2010-01-04 14 views
6

Adlandırılmış Borular? XML-RPC? Standart Giriş-Çıkış? Ağ hizmetleri ?Bir .NET Programı için en hızlı IPC yöntemi nedir?

Ben paylaşılan bellek gibi güvensiz şeyler kullanmak ister ve benzeri

+0

Windows veya Linux? –

+3

Ne kadar gidiyorsunuz? Bu, aynı bilgisayarda veya aynı kümedeki farklı bilgisayarlar arasında veya aynı LAN'daki farklı bilgisayarlar arasında veya farklı ağlardaki farklı bilgisayarlar arasında veya Internet'teki herhangi iki isteğe bağlı bilgisayar arasında çalışan süreçler arasında mıdır? –

+1

İşlemler arasında ne tür veri alışverişi yapıyorsunuz? – Michael

cevap

9

Adlandırılan boruları en hızlı yöntem olacağını, ancak yalnızca aynı bilgisayarda süreçler arasındaki iletişim için çalışır. Adlandırılmış borular iletişimi ağ yığınının sonuna kadar gitmez (yalnızca aynı bilgisayarda iletişim için çalıştığı için) bu nedenle her zaman daha hızlı olacaktır. Özellikle bu nedenle bu yolu gitmek istemiyorum belirtti beri

Ben Paylaşılan Bellek dışarı bıraktı. Paylaşılan Bellek tho adı verilen borulardan daha hızlı olacaktır. yalnızca aynı bilgisayara veya farklı bilgisayarlar arasında iletişimi gerekiyorsa

Yani bağlıdır. XML tabanlı bir iletişim protokolü (ör. Web Servisleri) genellikle XML'deki büyük ek yük nedeniyle daha yavaş olacaktır.

+4

Adlandırılmış borular * uzak işlemlerle iletişim için * ve * olabilir *. Sadece yerel işlemlerde kullanılabilecek * anonim borular. – Aaronaught

+0

Bundan emin misin? NET'te her zaman yerel süreçler arasında kullanılabileceğini düşünmüştüm ... –

+3

Evet, adlandırılmış yöneltmeler, istemci/sunucu iletişimi için, çok benzer soketlerde kullanılmak üzere tasarlandı, ancak bazı istemcide çalışan soketlerin aksine sistemler "sunucular" olamaz. –

5

i hızlı bir cevap bu orada olduğunu sanmıyorum. Eğer ben olsaydım, Stevens ve Rago tarafından Advanced Programming in the Unix Environment (APUE) kopyasını satın alır/borç alır ve IPC üzerinde 15 ve 16. Bölümleri okurdum. Eğer gerçekten * nix'in (bir çoğunun herhangi bir POSIX sistemi için geçerli olduğu) çekirdek seviyesine kadar nasıl çalıştığını anlamak istiyorsanız mükemmel bir kitap.

hızlı bir cevap gerekiyorsa, ben verimlilik azalan sırada (bunun içine düşünce büyük miktarda koymadan) Aşağıdaki derdi:

Network IPC/Internet Sockets

, size aktarmak veri kodlanmış nasıl düşünmek zorunda olacak/bellek kullanımı ve CPU kullanımı arasında çözülür ve ticaret tirme. Ağ düzeyinde

, size üst üste çalıştırmak için gidiyoruz protcols ne katmanları dikkate almak gerekir. En yaygın olarak, application layer'un altında TCP/IP veya UDP arasında seçim yapacaksınız. TCP hata düzeltme, sağlama toplamı ve diğer pek çok şey olduğu için çok daha fazla ek yüke sahiptir. Mesajların tesliminde ihtiyacınız varsa, UDP'nin aksine TCP kullanmanız gerekir. Bunların üzerine

(HTTP üst veya FTP/SMTP vb gibi başka bir protokol ile ilgili), HTTP, sabun gibi diğer protokolleridir. İkili bir protokol, CPU bağlı değil ağ bağlı olduğunuz sürece daha verimli olacaktır. MS.Net platformunda SOAP kullanılıyorsa, mesajların ikili kodlaması ağda daha hızlı olacaktır ancak daha fazla CPU yoğun olabilir.

ben gidebiliriz.Bu basit bir soru değil. Gecikmelerin nerede olduğunu ve arabelleğin nasıl işlendiğini öğrenmek, her zaman IPC ile zorladığınız ticaret kararları hakkında karar verebilmenin anahtarıdır. Kaputun altında neler olup bittiğini bilmek istiyorsanız, yukarıdaki APUE kitabını öneririm ...

+0

-1: O _did_ evet C# –

+2

evet, ama o da mono dedi ve C# veya başka bir dilde gerçekten bu yöntemlerden herhangi birini kullanarak sizi durduran hiçbir şey yoktur. C# bir dildir. bir işletim sistemi değil. Cevabımı düşüren biraz haksızlık düşünüyorum ... – billywhizz

3

Windows Messaging, IPC'nin en hızlı yollarından biri.

2 form tabanlı .Net uygulamaları arasında veri alışverişi yapmak için WM_COPYDATA IPInvoke çağrılarını kullanmak mümkündür ve tam olarak bunu yapmak için açık kaynak kodlu bir kütüphanem var. Oldukça sıcak bir dizüstü bilgisayarda 1771 msg/sn civarında bir işaret gördüm.

paylaşılan bellek ile gitmeyecek neden bilmiyorum

http://thecodeking.github.com/XDMessaging.Net

0

, ama onun çok çok hızlı C'den aynı makinede C# apps # ve (TCP soketleri farklı olarak) çok güvenilir. spazzarama/SharedMemory, basit bir yüksek düzey API ile paylaşılan dizileri ve arabellekleri destekleyen harika bir C# lib dosyasıdır. Sınıfı ortak bir bellek dosyası adıyla (istemci/sunucu tarafında) başlatırsınız ve sonra diziyi güncellersiniz. Değerler sihirli bir şekilde diğer tarafta görünür!