我正在使用 ServiceStack 的 JsonServiceClient 和 Silverlight 5 从我的 ASP.Net 服务器接收 JSON 数据。它非常适用于短 JSON 字符串,但是当涉及到大量数据时,会抛出 StackOverflowException ServiceStack.ServiceClient.Web.AsyncServiceClient.ReadCallBack<>
。
因此,我检查了GitHub 上的最新源代码,发现数据是从流中以4096 字节块的形式逐块读取的。问题是这个方法读取一个块并告诉流在完成时递归地调用自己。我们收到的数据越多,递归调用就越多。这就是当接收到的数据太大时应用程序崩溃的原因。
想法:
- 将方法重构为迭代而不是递归。处理所有这些条件返回、等待、try-catch 等似乎是一项艰巨的任务。
- 增加块大小。不知道这里有没有4096的原因,所以我宁愿不要一个人做这个。
无论如何,在我下载所有源代码,自己修改和编译之前,我想听听你对此的看法。是bug还是我用错了?