2012-10-15 37 views
4

我目前在DataTable中存储了大约一百万行,这需要大约600 Mb的RAM。如何在Windows窗体中保留大量内存数据C#

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

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

这样做的原因是,无需等待每次运行应用程序时都将数据读入Datatable。

....我对C#相当新,所以我很抱歉如果这是一个适当的问题在这里。

+0

我不确定你的问题是否有意义,因为它的措辞:如果应用程序关闭,你将如何保持你的数据在内存中?你的意思是你想将数据存储到磁盘? –

+0

我不想销毁在应用程序启动时创建的DataTable,这必须是用户决定从内存中删除DataTable。 – Dreamer78692

+0

如果应用程序关闭,您*无法*将DataTable保存在内存中。它不会在您的应用程序启动时才会出现,除非您加载它! –

回答

3

如果在内存中存在正在运行的应用程序/进程,那么只能保留内存中的某些内容 - 如果应用程序关闭(并且只有1个应用程序实例在内存中打开),那么内存将会被发布。如果你想保留在内存中,那么你唯一的选择将是

  • 不要关闭你的应用程序,例如只是隐藏窗口(通常是一个非常糟糕的想法,你的用户不会感谢你)
  • 将数据保存在另一个单独的进程中,即使应用程序不是,例如Windows服务也可以保持运行不是你的用户会感谢你的东西,除非你真的试图开发一种服务形式而不是Windows应用程序)。

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

或者只是像你现在每次加载数据集。

3

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

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

+0

我只是压力测试的应用程序,我复制了14000行的表。数据来自数据库,我将其存储到DataTable中,因为查询数据库和Datatable需要更长的时间。所以我不想要磁盘或数据库中的数据,但是在内存中,就像Qlikview的工作方式。 – Dreamer78692

+1

我建议您每次只加载20到50条记录,因为这会使应用程序更具响应性,并且用户更可能浏览您加载的所有数据。如果您在Google上搜索某项内容,并且每页显示10,000条结果,需要多长时间,以及您要查看多少结果? – Ekk

+0

对不起,我得到它有点慢,谢谢。 – Dreamer78692

相关问题