visual valid returns name example comment c# .net persistent-storage

valid - C#.NET: ¿método para almacenar información persistente a muy pequeña escala?



returns c# (5)

Tengo una aplicación que necesitará muy poco almacenamiento persistente. De manera realista, estamos hablando de <30 enteros. Todas las necesidades de la aplicación es conocer esos números enteros en el próximo inicio (y los números enteros cambian a medida que se ejecutan).

Una base de datos es una exageración para esto, pero tampoco quiero usar un archivo de texto.

¿Tiene C # algún mecanismo para la persistencia de valores pequeños como este entre ejecuciones? Me he dado cuenta de que puedes almacenar cosas en archivos de recursos y en otros lugares, aunque no sé si puedes cambiarlas en el tiempo de ejecución. Solo estoy aprendiendo C # y .NET para un nuevo trabajo, ¡así que disculpas si esta es una pregunta tonta!


Aquí hay un blurp de otra publicación SO que explica cómo configurar los ajustes de la aplicación, esta es una solución simple basada en archivos para leer / escribir valores.

" Si trabaja con Visual Studio, es bastante fácil obtener configuraciones persistentes. Haga clic con el botón derecho en el proyecto en el Explorador de soluciones, elija Propiedades. Seleccione la pestaña Configuración, haga clic en el hipervínculo si no existe la configuración . Use la pestaña Configuración para crear configuración de la aplicación. Visual Studio crea los archivos Settings.settings y Settings.Designer.settings que contienen la configuración de clase singleton heredada de ApplicationSettingsBase. Puede acceder a esta clase desde su código para leer / escribir la configuración de la aplicación: "

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


Elegiría el almacenamiento de archivos y evitaría la base de datos o el registro, ya que lo primero que se necesita es la mayor parte del marco y lo segundo ... bueno, nunca juegues con el Registro :)

usando XML como almacenamiento de archivos, esta es una gran lectura:

¿Cómo se analizan los archivos XML?

puede crear su archivo para guardar todas las ID en el mismo nodo, o escribir una ID por nodo, depende de usted, algo como esto estaría bien:

<?xml version="1.0" encoding="utf-8" ?> <settings> <selected> <id>1</id> <id>8</id> <id>12</id> <id>15</id> </selected> </settings>

Para crear dicho archivo:

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");

Para leer puedes usar XmlReader , XmlTextReader , XDocument , etc ...


Podría simplemente serializar la lista a un archivo xml. Así es como lo guardas:

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

Y recuperarlo es igual de fácil:

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


Si está utilizando c # 4.0 o superior, es posible que desee echar un vistazo a los nuevos archivos asignados en memoria .

El uso de archivos de memoria persistente asignada le dará la facilidad de un archivo, pero la velocidad de asignación en la memoria. Por supuesto, todavía tendrá que administrar el formato de archivo usted mismo.

  • Archivos persistentes asignados en memoria

Los archivos persistentes son archivos asignados en memoria que están asociados con un archivo de origen en un disco. Cuando el último proceso ha terminado de trabajar con el archivo, los datos se guardan en el archivo de origen en el disco. Estos archivos asignados en memoria son adecuados para trabajar con archivos de origen extremadamente grandes.

Probablemente esto sea excesivo para 30 enteros, pero es otra opción, especialmente si la velocidad es clave.


Yo usaría la base de datos sqlite incrustada.

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

SQLite es una base de datos pequeña, rápida e integrable donde el motor de base de datos y la interfaz se combinan en una sola biblioteca. También tiene la capacidad de almacenar todos los datos en un solo archivo. Por lo tanto, si su aplicación requiere una base de datos independiente, SQLite es quizás la opción perfecta para usted. Hay, por supuesto, otras razones para elegir SQLite, incluyendo:

SQLite tiene una pequeña huella de memoria y solo se requiere una sola biblioteca para acceder a las bases de datos, lo que la hace ideal para aplicaciones de bases de datos integradas. SQLite se ha portado a muchas plataformas y se ejecuta incluso en Windows CE y Palm OS. SQLite es compatible con ACID, y cumple con los cuatro criterios: atomicidad, consistencia, aislamiento y durabilidad. SQLite implementa un gran subconjunto del estándar ANSI-92 SQL, que incluye vistas, subconsultas y desencadenadores. No hay problema de controladores de base de datos adicionales, se requiere configuración ODBC. Solo incluye la biblioteca y el archivo de datos con tu aplicación. SQLite tiene API de lenguaje nativo para C / C ++, PHP, Perl, Python, Tcl, etc. La API nativa para C # aún no está presente.