为什么我会得到Ice :: MemoryLimitException,即使Ice.MessageSizeMax = 2000000也是如此

时间:2011-12-08 16:41:24

标签: c# .net exception ice

您好我使用Zeroc 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个客户。

我在互联网上搜索了答案,我被告知要增加Ice.MessageSizeMax,我这样做了。我已经将MessageSizeMax增加到2,000,000 Kb,但它没有任何区别,我只是测试了31,000条记录(大约1.8兆的数据)并且仍然得到Ice.MemoryLimitException。 1.8米不是很大!

我做错了什么或Zeroc Ice有错误吗?

非常感谢能够提供帮助的任何人。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

打开服务器端的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);
相关问题