当前位置: 首页 > 编程语言 > C#

寻找本地磁盘存储数据的思路分享

时间:2023-04-10 21:48:42 C#

寻找本地磁盘存储数据的思路我有一个XML文件存储了大量的数据,173MB(460万行),我存储在我的Windows窗体应用程序的工作目录中。它是将数据表写入XML文件的结果。数据表最初是从对SQLServer的查询中填充的。我存储在本地而不是从服务器请求的原因是数据请求需要超过40秒并且有时会超时并且数据是静态的并且永远不会改变,用户可以离线仍然使用数据。将文件加载回数据表需要20-30秒。我不太担心从磁盘加载所需的时间,因为我让用户知道数据正在加载并耐心等待。但是,我不喜欢XML文件格式,我正在寻找其他磁盘存储方法。数据表只是作为集合对象最终填充的中间人。如果你抽过烟,我想听听他们的事。我希望远离数据库解决方案并倾向于二进制文件方法。下面是我的第一次尝试,但出现内存不足异常:byte[]b=null;使用(MemoryStreamstream=newMemoryStream()){BinaryFormatterbformatter=newBinaryFormatter();bformatter.Serialize(stream,timeData);b=stream.ToArray();}使用(FileStreamfileStream=newFileStream("brad.bin",FileMode.Create,FileAccess.Write)){fileStream.Write(b,0,b.Length);我会看一个紧凑的(本机)数据库,如SQLServerCE或SQLite。数据库就是为此而设计的。SQLite非常好,您可以从各种断开连接的数据库解决方案中进行选择,但这实际上取决于您投入的工作以及您拥有的数据集。例如,您可以尝试SQLite或csv文件。如果它永远不会改变,为什么不首先提供应用程序安装呢?您是否对“永不改变”的实际含义感到困惑?至于本地存储解决方案,有很多可供选择,例如SQLite,它允许您甚至在本地使用数据库解决方案,而无需安装任何麻烦。如果您使用数据表作为中间人并从那里加载到您的集合中,那么使用XMLSerialize直接加载到您的集合中怎么样?跳过中间人应该会给你一些性能提升。为什么应用程序每次都要求整个数据集?如果您使用的是数据库,您应该(恕我直言)像对待堆一样对待数据库...-根据需要应用您需要的一些操作可能需要比较数据库中的不同数据,但这就是SQL的用途。在数据库中执行这些操作,而不是在应用程序中。您是否有绝对需要内存中的整个数据集的用例场景?我也不喜欢XML,但我认为如果数据是完全只读的就可以了。我认为您可以以标准XML文本格式将XML文本写入磁盘,尽管您使用的是名称中带有Binary的类。打开看看。(使用ddUnix工具(如果你还没有dd,可以下载一些Unix工具)获取示例文件的前几兆字节,在写字板或类似工具中打开它,然后看一下。)如果你想制作它人类可读性较低,请考虑使用加密。编辑如果您的工作站非常注重任务并在RAM中保留173MB的数据,那么使用它而不是摆弄SQL就具有商业意义。为什么不将数据保存在服务器上并使用一些标准的数据集缓存呢?创建一个返回180Mb数据的查询听起来像是一个设计问题。我认为对于历史趋势更合适的解决方案是只检索当前显示的那些记录。如果要放大图形的一部分,只检索放大的数据。关于二进制序列化,您应该直接序列化为FileStream:使用(FileStreamfileStream=newFileStream(“brad.bin”,FileMode.Create,FileAccess.Write)){newBinaryFormatter()。首先...这是一个丑陋的段落:P关于你的问题,如果你使用.NET,为什么不使用SQLServerCompact(mdf文件)?这就像使用SQLServer,但数据存储在文件中。个人认为这是最好的方式,但是如果你想要options那么我觉得你可以考虑上面的并且我需要了解更多关于C#的学习教程,希望大家多多关注-本文收集自网络且不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: