netNamedPipeBindingバインディングを使用してコンソールに自己ホスト型のWCFサービスがあります。サービスには空のメソッドが1つだけありますSend(DataTable bulk)
[ServiceContract]
public interface IWcfQueueService
{
    [OperationContract]
    void Send(DataTable bulk);       
}
public class WcfQueueService : IWcfQueueService
{
    public void Send(DataTable bulk)
    {           
       // Here would be something like _bulks.Add(bulk);
       // BUT, for now it is empty method and still it's slower than MSMQ
    }    
}
私のクライアントはDBから200Kの入力を取得し、それをBoundedThreadPoolで処理します(たとえば、20のスレッドのみを作成します)。各入力は異なるスレッドで処理されます。各スレッドが実行され、結果MyMethodの最後ににMyMethod追加されbulkManagerます。
public void MyMethod(string input)
{            
    var res = ProcessInput(input);
    bulkManager.Add(res);
}
N個のアイテム(=バルク)を蓄積するbulkManagerと、バルクを別のスレッドに渡し、次の2つの方法のいずれかでそのバルクをキューに入れます。
- wcfが有効になっている場合:
wcfQueueService.Send(bulk); - それ以外の場合、MSMQが有効になっている場合:
new MessageQueue(@".\private$\q").Send(new Message {Body = bulk}); 
2つの方法はすべて機能しますが、MSMQははるかに高速に機能します。MSMQを使用すると、クライアントは20秒で約80Kのバルクを処理できますが、wcfを使用すると20K〜30Kのバルクしか処理できません。なぜそれが起こるのか分かりません。私のWCFは、MSMQとは異なるプロセスで実行されます。さらに、私のWCFは何も格納せず、空のメソッドがあります。では、なぜMSMQがWCFに勝つのでしょうか。
更新しました
提案されたようleppieに、私は.NetRemotingを試しました。NetRemotingは確かに速度を改善しました。クライアントは60Kを処理しました。だが、
- それでもMSMQより遅い
 - 私が読んだように、.Net RemotingはWCFによって非推奨になり、これによるとWCFは.Net Remotingよりも高速であるはずですが、なぜwcfが遅くなるのでしょうか。たぶん私のバインディングが間違っていますか?