Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么即使使用Ice.MessageSizeMax=2000000,我也会得到Ice::MemoryLimitException_C#_.net_Exception_Ice - Fatal编程技术网

C# 为什么即使使用Ice.MessageSizeMax=2000000,我也会得到Ice::MemoryLimitException

C# 为什么即使使用Ice.MessageSizeMax=2000000,我也会得到Ice::MemoryLimitException,c#,.net,exception,ice,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;

您好,我已经使用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);
};
enum DrawType{All,Instant,Raffle};
结构TicketSoldSummary{
int scheduleId;
DrawType数据类型;
字符串名称;
长起始日期;
长期;
字符串WinningNumber;
国际纽蒂克特;
字符串状态;
};
序列票证SOLDSUMMARYLIST;
接口IReportManager{
[..]
ticketsoldSummary列表getTicketSoldSummary(长开始时间,长结束时间);
};
当我调用此方法时,它通常工作正常,但偶尔(大约25%的时间)调用方会收到Ice::MemoryLimitException。我们通常一次运行2-3个客户端

我在互联网上搜索答案,他们告诉我增加Ice.MessageSizeMax,我做到了。我已经将MessageSizeMax增加到2000000 Kb,但没有任何区别,我只是对31000条记录(大约1.8兆的数据)进行了测试,仍然得到了Ice.MemoryLimitException。1.8兆不是很大

我是做错了什么还是Zeroc Ice中有bug


非常感谢所有能够提供帮助的人。

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

我认为需要在客户端和服务器端配置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);

在服务器端打开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);

您是否已确定在什么情况下引发此异常。你能看一下这个库的源代码吗?谢谢你的回复。当数据大小大于MessageSizeMax时,应该会发生此错误,但在我的例子中,它似乎与网络速度更相关。例如,在VPN上,我90%的时间都会收到错误,但在LAN上只有25%的时间会收到错误。如果您还可以发布配置文件,这将非常有用。例如,是否在所有组件(服务器、客户端、Glacier2路由器,如果您正在使用)上都设置了MessageSizeMax?查看异常以了解抛出的组件也很好。您是否确定在什么情况下抛出此异常。你能看一下这个库的源代码吗?谢谢你的回复。当数据大小大于MessageSizeMax时,应该会发生此错误,但在我的例子中,它似乎与网络速度更相关。例如,在VPN上,我90%的时间都会收到错误,但在LAN上只有25%的时间会收到错误。如果您还可以发布配置文件,这将非常有用。例如,是否在所有组件(服务器、客户端、Glacier2路由器,如果您正在使用)上都设置了MessageSizeMax?如果能看到异常,知道抛出的是哪个组件,也会很好。