Tôi có dịch vụ WCF tự lưu trữ trong giao diện điều khiển với ràng buộc netNamedPipeBinding
. Dịch vụ này có chỉ là một phương pháp có sản phẩm nào Send(DataTable bulk)
Tại sao MSMQ nhanh hơn WCF QueueService?
[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
}
}
Khách hàng của tôi được 200K đầu vào từ DB và xử lý nó với BoundedThreadPool của chúng tôi (chỉ tạo ra, chúng ta hãy nói rằng, 20 bài). Mỗi đầu vào được xử lý với chuỗi khác nhau. Mỗi chuỗi thực hiện MyMethod
và vào cuối MyMethod
kết quả được thêm vào bulkManager
.
public void MyMethod(string input)
{
var res = ProcessInput(input);
bulkManager.Add(res);
}
Khi bulkManager
tích lũy N mục (= số lượng lớn) nó vượt qua số lượng lớn cho một thread mà tất cả nó là enqueue rằng số lượng lớn với một trong hai phương pháp:
- Nếu WCF được kích hoạt:
wcfQueueService.Send(bulk);
- khác nếu MSMQ được bật:
new MessageQueue(@".\private$\q").Send(new Message {Body = bulk});
Cả hai phương pháp đều hoạt động, nhưng MSMQ hoạt động nhanh hơn nhiều. Với MSMQ client quản lý để xử lý khoảng 80K bulks trong 20seconds trong khi với wcf chỉ 20K-30K bulks. Tôi không hiểu tại sao nó xảy ra. WCF của tôi chạy trong quá trình khác nhau như MSMQ. Ngoài ra, WCF của tôi không lưu trữ bất cứ điều gì, nó có phương pháp trống rỗng. Vậy tại sao MSMQ thắng WCF?
Cập nhật
Như leppie
đề nghị tôi thử .NetRemoting. NetRemoting thực sự đã cải thiện tốc độ. Khách hàng đã xử lý 60K. Nhưng,
- Nó vẫn chậm hơn so với MSMQ
- Khi tôi đọc Net Remoting bị phản đối bởi WCF và WCF nên nhanh hơn Net Remoting theo this, vậy tại sao tôi nhận được rằng WCF của tôi là chậm? Có lẽ ràng buộc của tôi là sai?
Có thể bạn sẽ tìm thấy điều khiển từ xa nhanh hơn rất nhiều so với MSMQ (được đặt tên theo đường ống, tôi giả định IPC trên máy cục bộ). – leppie
@leppie,. Net Remoting thực sự đã cải thiện tốc độ. Khách hàng đã xử lý 60K. Nhưng, 1 - nó vẫn còn chậm hơn so với MSMQ và 2 - như tôi đọc. Net Remoting được deprecated bởi WCF và WCF nên được nhanh hơn. Net Remoting theo http://msdn.microsoft.com/en-us/library/bb310550 .aspx # wcfperform_topic3d, vậy tại sao tôi nhận được wcf của tôi chậm hơn? – theateist
@theateist: Bạn có thể thay đổi 'InstanceContextMode' trên dịch vụ thành' Single' và 'ConcurrencyMode' thành' Multiple' không? Sau đó thực hiện một thử nghiệm khác. Cũng cố gắng điều chỉnh cài đặt điều chỉnh (trong hành vi dịch vụ). –