为什么我得到Ice::MemoryLimitException,即使Ice. messagesizemax =20000

本文关键字:Ice 即使 messagesizemax 20000 MemoryLimitException 为什么 | 更新日期: 2023-09-27 18:17:28

嗨,我已经使用zero Ice通信库(v3.4.2)编写了一个c#客户端/服务器应用程序。

我正在从服务器传输对象序列,然后在客户端以表格格式显示它们。很简单。

我定义了以下切片类型

enum DrawType { All, Instant, Raffle };
struct TicketSoldSummary {
  int scheduleId;
  DrawType dType;
  string drawName;
  long startDate;
  long endDate;
  string winningNumbers;
  int numTicket;
  string status;
};
sequence<TicketSoldSummary> TicketSoldSummaryList;
interface IReportManager {
  [..]
  TicketSoldSummaryList getTicketSoldSummary(long startTime, long endTime);
};

当我调用这个方法时,它通常工作得很好,但偶尔(大约25%的时间)调用者会得到Ice::MemoryLimitException。我们通常一次运行2-3个客户端。

我在网上搜索答案,我被告知要增加冰。MessageSizeMax,我做了。我已经将MessageSizeMax增加到2,000,000 Kb,但这没有什么区别,我刚刚用31,000条记录(大约1.8 mb的数据)进行了测试,仍然得到Ice.MemoryLimitException。1.8毫克不是很大!

我做错了什么还是有一个bug在零冰?

非常感谢任何可以提供帮助的人。

为什么我得到Ice::MemoryLimitException,即使Ice. messagesizemax =20000

我认为MessageSizeMax需要在客户端和服务器端进行配置。还可以使用最大值(3)启用跟踪,并检查消息的大小(在网络上)

在服务器端打开Ice.Warn.Connections并查看日志。还要确保正确应用客户机最大消息大小。我设置了Ice。MessageSizeMax在客户端如下所示,

Ice.Properties properties = Ice.Util.createProperties();
properties.setProperty("Ice.MessageSizeMax", "2097152");//2gb in kb
Ice.InitializationData initData = new Ice.InitializationData();
initData.properties = properties;
Ice.Communicator communicator = Ice.Util.initialize(initData);
相关文章: