c# - NetMQ Multipart Message发送大对象的性能问题

标签 c# performance zeromq netmq

我在 C# (NetMQ) 中使用以下代码发送大对象:

var client = new DealerSocket("<connection String>");
var serializedData = new string('*', 500000);
var message = new List<byte[]>();
message.Add(Encoding.UTF8.GetBytes("BulkSend"));
message.Add(Encoding.UTF8.GetBytes(serializedData));
client.TrySendMultipartBytes(TimeSpan.FromMilliseconds(3000), message);

如果在高流量(例如每秒 10MB 消息)中使用,此代码将占用 90% 的 CPU 使用率。 经过一些研究,我尝试了以下两个代码。首先,我删除了第一帧(“批量发送”):

var client = new DealerSocket("<connection String>");
var serializedData = new string('*', 500000);
var message = new List<byte[]>();
message.Add(Encoding.UTF8.GetBytes(serializedData));
client.TrySendMultipartBytes(TimeSpan.FromMilliseconds(3000), message);

令人惊讶的是,性能得到了提升。其次,我重新排列了两个框架。我的意思是将大框架移到第一个。像下面这样:

var client = new DealerSocket("<connection String>");
var serializedData = new string('*', 500000);
var message = new List<byte[]>();
// change the order of two following codes
message.Add(Encoding.UTF8.GetBytes(serializedData));
message.Add(Encoding.UTF8.GetBytes("BulkSend"));

client.TrySendMultipartBytes(TimeSpan.FromMilliseconds(3000), message);

再次令人惊讶的是,性能得到了提升!

有什么问题?我怎样才能提高性能?在 netmq 上使用 zproto 怎么样?是否有任何适当的文档?

最佳答案

正如我所发现的,发送多部分消息存在问题。你可以看到这个链接http://hintjens.com/blog:84 . 并可能将您的消息编码为一条消息,然后发送!

关于c# - NetMQ Multipart Message发送大对象的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38441781/

相关文章:

jquery - 使用 javascript 而非常规 anchor 移动到我网站中的其他页面

sql-server - 是否在未使用约束更新列的 SQL 更新语句上检查外键约束?

zeromq - 使用ZMQ进行双向线程间通信

node.js - 分布式信号量系统,用于序列化不能同时运行的任务

c# - 多个 Entity Framework 表破坏 WCF

C# 正则表达式匹配查找几乎相同的字符串

.net - 序列化性能差的可能解决方案

c++ - 与使用 Qt 处理 ZeroMQ 的永久线程通信

c# - NULL 数组上的笛卡尔

C# 多态性和方法继承