4

我目前将大约一百万行存储到 DataTable 中,这需要大约 600 Mb RAM。

因此,当您运行应用程序时,它会在 DataTable 中存储 1 000 000 行并将其显示在 GridView 上。当您关闭应用程序时,这显然会清除内存。

我愿意给用户这个选项,换句话说,当用户试图关闭表单时,他会被问到是否要清除内存。

这样做的原因是他每次运行应用程序时不必等待数据被读入Datatable。

....我对 C# 相当陌生,所以如果这是一个合适的问题,我深表歉意。

4

3 回答 3

3

我建议您将其保存在文件或数据库中而不是内存中。您可以查询一些您想在运行时使用的数据。例如,一次 20 或 50 条记录。

如果您一次在数据网格中显示 1M 条记录是没有意义的,我敢打赌,即使您也不会浏览它们。

于 2012-10-15T10:35:18.220 回答
3

如果有一个正在运行的应用程序/进程在内存中包含该数据,则您只能在内存中保留一些内容 - 如果您的应用程序关闭(并且只有 1 个应用程序实例在内存中打开该数据),那么内存将被释放。如果您想将其保存在内存中,那么您唯一的选择是

  • 不要关闭您的应用程序,例如只是隐藏窗口(通常是一个非常糟糕的主意,您的用户不会感谢您)
  • 将这些数据保存在另一个单独的进程中,即使您的应用程序不运行,该进程也会保持运行,例如 Windows 服务(同样可能不是您的用户会感谢您的东西,除非您实际上是在尝试开发一种服务形式反对 Windows 应用程序)。

一个更好的主意是改变您的应用程序处理大型数据集的方式,以便它不需要将所有数据都保存在内存中,例如,如果您在大型列表视图中显示所有数据,然后使用虚拟列表视图这样只有当前显示给用户的那些行才会加载到内存中。然后,您可以将数据存储在外部数据库或半永久性文件(例如 SQLite 数据库)中。

或者像现在一样每次加载数据集。

于 2012-10-15T10:51:07.887 回答
0

尝试压缩特定区域的数据(对象集对应于行)并在需要时提取。参考, 在点网中压缩对象

于 2019-07-05T03:07:00.890 回答