Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在windows窗体C中保存内存中的大型数据集#_C#_Winforms_Memory_Datatable - Fatal编程技术网

C# 如何在windows窗体C中保存内存中的大型数据集#

C# 如何在windows窗体C中保存内存中的大型数据集#,c#,winforms,memory,datatable,C#,Winforms,Memory,Datatable,我目前正在将大约一百万行存储到一个数据表中, 这需要大约600 Mb内存 因此,当您运行应用程序时,它将在DataTable中存储1000000行并在GridView上显示。当您关闭应用程序时,这显然会清除内存 我想给用户这个选项,换句话说,当用户试图关闭表单时,他将被询问是否要清除内存 这样做的原因是他不必在每次运行应用程序时等待数据读入数据表 。。。。我是C#的新手,如果这是一个合适的问题,我很抱歉。我建议您将其保存在文件或数据库中,而不是内存中。您可以查询要在运行时使用的某些数据。例如,一

我目前正在将大约一百万行存储到一个数据表中, 这需要大约600 Mb内存

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

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

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


。。。。我是C#的新手,如果这是一个合适的问题,我很抱歉。

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


如果一次在datagrid中显示1M条记录是没有意义的,我敢打赌,即使您也不会查看这些记录。

只有当某个正在运行的应用程序/进程的内存中有某个数据时,您才能在内存中保留该数据—如果您的应用程序关闭(并且只有一个应用程序实例打开,内存中有该数据)然后内存将被释放。如果你想把它保存在内存中,那么你唯一的选择就是

  • 不要关闭应用程序,例如,只需隐藏窗口即可(通常这是一个非常糟糕的主意,用户不会为此感谢您)
  • 将这些数据保存在另一个单独的进程中,即使您的应用程序不是Windows服务,该进程也会保持运行(同样,您的用户可能不会为此感谢您,除非您实际上正在尝试开发一种与Windows应用程序相反的服务形式)
更好的方法是改变应用程序处理大型数据集的方式,这样就不需要将所有数据都保存在内存中,例如,如果在大型列表视图中显示所有数据,则使用虚拟列表视图,以便仅将当前显示给用户的行加载到内存中。然后可以将数据存储在外部数据库或半永久性文件(如SQLite数据库)中


或者像当前一样每次加载数据集。

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

我不确定您的问题是否有意义,因为它的措辞是:如果应用程序关闭,您将如何将数据保存在内存中?您的意思是要将数据存储到磁盘吗?我不想破坏应用程序启动时创建的数据表,这必须是用户从内存中删除数据表的决定。如果应用程序关闭,则无法将数据表保留在内存中。当应用程序启动时,它将不在那里,除非您加载它!是的,我知道,我认为在C#中可能有一种“简单”的方法来实现这一点,而无需创建窗口服务或写入磁盘。我只是在对应用程序进行压力测试,我复制了一个包含14000行的表。数据来自数据库,我将其存储到DataTable中,因为查询数据库比查询DataTable需要更长的时间。因此,我不希望数据存储在磁盘或数据库中,而是存储在内存中,类似于Qlikview的工作方式。我建议您一次只加载20到50条记录,因为这会使应用程序更具响应性,用户更有可能查看您加载的所有数据。如果你在谷歌上搜索某个东西,它会显示每页10000条结果,需要多长时间,以及你要查看多少条结果?对不起,我获取的速度有点慢,谢谢。