【发布时间】:2015-03-30 23:45:18
【问题描述】:
我有一个应用程序发出一个 HTTP 请求,该请求以 JSON 格式返回大量数据。收到响应后,应用程序将其反序列化为 JSON,然后将其转换为 DataTable 对象,然后将其分配为 DataSource 的 DevExpress.XtraGrid.GridControl 对象。这种方法的问题是一切都在内存中完成,如果返回非常大的响应,将消耗大量内存(有时>1GB)。因此,我正在尝试减少内存消耗。
在处理 HTTP 响应和 JSON 反序列化时减少内存使用似乎很简单——我只需要切换到使用流而不是使用巨大的字符串来解析数据。我不确定是否将 JSON 流转换为 GridControl 可以使用的东西,而不会将其全部加载到内存中。
我设想将数据存储在某个临时文件中,该文件支持我可以分配给该DataSource 的对象。我们的用户将快速滚动和过滤这些数据,所以我希望性能仍然非常敏捷。换句话说,我需要将它存储在一些二进制结构中,以便快速读取/扫描表,而无需进行大量解析。像 SQLite 这样的东西可以工作,除了我想要更简单的东西。我对 *nix 比对 .NET 更熟悉,所以我不太了解 .NET 选项有哪些。
什么是一个好的库/组件可以用于这样的事情?根据XtraGrid's data binding methods 的说法,我们可以为DataSource 使用哪些对象具有相当大的灵活性。
如果组件在内存中启动并且仅在内存超过阈值时才溢出到磁盘,那就太好了。
【问题讨论】: