我有一个服务器端服务,可以向我发送巨大的 DTO。我需要将它们放在 CellTable 中。
就像 10-200 行,我需要同时查看所有内容。
我有一个服务器端日志,它跟踪我的服务的最后一行“人造”代码(就在返回之前)。
最好的情况是,此日志与完全加载的表之间有 2 分钟的间隔。大多数时候,在这个过程中有些东西会中断,这让我很不自在。
我有哪些选择?
谢谢
编辑 :
我尝试了Andrei的想法,区分数据下载(rpc回调)的长度和celltable加载的长度。
我想确定一下,这就是我在回调中所做的:
@Override
public void onSuccess(ResponseBean result) {
Window.alert("success " + new Date().toString());
resultPanel.updateResults(result);
Window.alert("celltable " + new Date().toString());
}
第一个警报在约 10 秒后发生。但第二个从未被调用。
这是 updateResults 背后的方法:
public void updateResults(ResponseBean response) {
dataProvider.getList().clear();
dataProvider.getList().addAll(response.beans());
myCellTable.setPageSize(response.beans.size());
}
编辑 2:
我尝试了很多东西。当我尝试用我的数据填充单元格表时会出现问题。
在 Chrome 中,出现 BSOD 的 chrome 版本。在 Firefox 中,它会静默中断,但不会执行剩余的 js 指令。
如果我尝试在 firebug 中读取控制台,我的 firefox 会使用 ~2.5GB ram 卡住。如果我使用 gwt-runner,它也会卡住。
在我的示例中,只有 4 行(4 个具有多个依赖项的对象)!
我怎样才能找到什么中断和哪里?
谢谢你的帮助:)
最后 :
好吧,所以我显然是个白痴。在 getValues() 的某处有一段不应该存在的“业务逻辑”,这导致了 OutOfMemory 错误。
不过方法是:
谢谢你们
最佳答案
通常我会把钱押在 RPC 序列化是瓶颈而不是 CellTable
渲染上。
但是,您是说第一个警报在 10 秒后出现,这与此相反。
使用 CellTable
渲染 200 个 DTO 应该足够快。
此外,通过网络发送 200 个 DTO 应该没有问题。
我使用了 CellTable
并通过线路发送了大约 5000 个 DTO,没有任何性能问题(尽管我一次只显示 50 个并使用分页)。
一些想法:
updateResults
函数并查看性能比较。 关于Gwt 性能问题 : huge data and celltable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12585408/