C#.NET – 存储一些非常小规模的持久性信息的方法?

我有一个需要极少持久存储的应用程序。 实际上,我们谈论的是<30整数。 所有应用程序的需求是在下次启动时知道那些整数(并且整数在运行时会发生变化)。

数据库对此来说太过分了,但我并不特别想要使用文本文件。

C#是否有任何机制可以在运行之间保持这样的小值? 我注意到你可以将东西存储在资源文件和其他一些地方 – 我不知道你是否可以在运行时更改它们。 我刚刚学习C#和.NET来完成一份新工作,所以如果这是一个愚蠢的问题,请道歉!

这是另一个SOpost的模糊 ,解释了如何设置应用程序设置,这是一个简单的基于文件的读/写值解决方案。

如果您使用Visual Studio,则可以很容易地获得可持久设置。 在解决方案资源管理器中右键单击项目,选择”属性“。如果设置不存在,请选择”设置“选项卡,单击超链接。使用”设置“选项卡创建应用程序设置.Visual Studio创建文件Settings.settings和Settings.Designer.settings,其中包含从ApplicationSettingsBaseinheritance的单例类设置。您可以从代码中访问此类以读取/写入应用程序设置:

Settings.Default["SomeProperty"] = "Some Value"; Settings.Default.Save(); // Saves settings in application configuration file 

我会使用embeeded sqlite数据库。

http://www.codeproject.com/Articles/22165/Using-SQLite-in-your-C-Application

SQLite是一个小型,快速且可嵌入的数据库,其中数据库引擎和接口组合到一个库中。 它还能够将所有数据存储在单个文件中。 因此,如果您的应用程序需要独立的数据库,SQLite可能是您的最佳选择。 当然,选择SQLite还有其他原因,包括:

SQLite占用的内存很少,访问数据库只需要一个库,因此非常适合嵌入式数据库应用程序。 SQLite已经移植到许多平台上,甚至可以在Windows CE和Palm OS上运行。 SQLite符合ACID标准,符合所有四个标准 – primefaces性,一致性,隔离性和持久性。 SQLite实现了ANSI-92 SQL标准的一个大子集,包括视图,子查询和触发器。 没有额外的数据库驱动程序的问题,需要ODBC配置。 只需在您的应用程序中包含库和数据文件即可。 SQLite具有用于C / C ++,PHP,Perl,Python,Tcl等的本地语言API。用于C#的原生API仍然不存在。

您可以将列表序列化为xml文件。 这是你如何保存它:

 var xs = new System.Xml.Serialization.XmlSerializer(typeof(List)); List ints = new List { 1, 2, 3 }; using (FileStream fs = new FileStream(@"C:\store.xml", FileMode.OpenOrCreate)) { xs.Serialize(fs, ints); } 

检索它同样容易:

 using (FileStream fs = new FileStream(@"C:\store.xml", FileMode.OpenOrCreate)) { ints = xs.Deserialize(fs) as List; } 

如果您使用的是c#4.0及更高版本,则可能需要查看新的内存映射文件 。

使用持久存储器映射文件将为您提供文件的简易性,但是可以提供映射到内存的速度。 您当然还是必须自己管理文件格式。

  • 持久的内存映射文件

持久文件是与磁盘上的源文件关联的内存映射文件。 当最后一个进程使用完文件后,数据将保存到磁盘上的源文件中。 这些内存映射文件适用于处理极大的源文件。

对于30个整数来说这可能有点过分,但这是另一种选择,特别是如果速度是关键的话。

我会选择文件存储并避免数据库或注册表作为它需要的第一个框架和第二个……哦,好吧,永远不要使用注册表:)

使用XML作为文件存储这是一个很好的阅读:

如何解析XML文件?

你可以创建你的文件来保存同一节点中的所有ID,或者为每个节点写一个ID,这取决于你,这样的事情会很好:

    1 8 12 15   

为了创建这样的文件:

  XmlDocument doc = new XmlDocument(); XmlElement set = (XmlElement)doc.AppendChild(doc.CreateElement("settings")); XmlElement sel = (XmlElement)set.AppendChild(doc.CreateElement("selected")); int[] selectedIds = new int[] { 1, 2, 3, 4, 5 }; foreach (int id in selectedIds) sel.AppendChild(doc.CreateElement("id")).InnerText = id.ToString(); string path = Path.GetDirectoryName(Application.ExecutablePath); doc.Save(path + "/settings.xml"); 

为了阅读你可以使用XmlReaderXmlTextReaderXDocument等…