C# 为什么即使使用Ice.MessageSizeMax=2000000,我也会得到Ice::MemoryLimitException
您好,我已经使用Zeroc Ice通信库(v3.4.2)编写了一个C#客户机/服务器应用程序 我正在从服务器传输一系列对象,然后以表格格式在客户端显示它们。很简单 我定义了以下切片类型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;
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?如果能看到异常,知道抛出的是哪个组件,也会很好。