Saltar al contenido

La mejor manera de almacenar datos localmente en .NET (C#)

Esta división ha sido evaluado por nuestros especialistas así garantizamos la veracidad de nuestra esta división.

Solución:

Almacenaría el archivo como JSON. Dado que está almacenando un diccionario que es solo una lista de pares de nombre/valor, esto es más o menos para lo que se diseñó json.
Hay bastantes bibliotecas .NET json gratuitas y decentes: aquí hay una, pero puede encontrar una lista completa en el primer enlace.

Realmente depende de lo que estés almacenando. Si está hablando de datos estructurados, XML o un SQL RDBMS muy liviano como SQLite o SQL Server Compact Edition funcionarán bien para usted. La solución SQL se vuelve especialmente convincente si los datos se mueven más allá de un tamaño trivial.

Si está almacenando grandes piezas de datos relativamente no estructurados (objetos binarios como imágenes, por ejemplo), entonces obviamente ni una base de datos ni una solución XML son apropiadas, pero dada su pregunta, supongo que es más lo primero que lo segundo.

Todas las anteriores son buenas respuestas y, en general, resuelven el problema.

Si necesita una manera fácil y gratuita de escalar a millones de datos, pruebe el proyecto de interfaz administrada ESENT en GitHub o desde NuGet.

ESENT es un motor de almacenamiento de base de datos integrable (ISAM) que forma parte de Windows. Proporciona almacenamiento de datos fiable, con transacciones, simultáneo y de alto rendimiento con bloqueo a nivel de fila, registro de escritura anticipada y aislamiento de instantáneas. Este es un contenedor administrado para la API ESENT Win32.

Tiene un objeto PersistentDictionary que es bastante fácil de usar. Piense en ello como un objeto Dictionary(), pero se carga automáticamente y se guarda en el disco sin código adicional.

Por ejemplo:

/// 
/// Ask the user for their first name and see if we remember 
/// their last name.
/// 
public static void Main()
{
    PersistentDictionary dictionary = new PersistentDictionary("Names");
    Console.WriteLine("What is your first name?");
    string firstName = Console.ReadLine();
    if (dictionary.ContainsKey(firstName))
    
        Console.WriteLine("Welcome back 0 1", firstName, dictionary[firstName]);
    
    else
    
        Console.WriteLine("I don't know you, 0. What is your last name?", firstName);
        dictionary[firstName] = Console.ReadLine();
    

Para responder a la pregunta de George:

Tipos de clave admitidos

Solo estos tipos son compatibles como diccionario keys:

Byte booleano Int16 UInt16 Int32 UInt32 Int64 UInt64 Flotante Doble Guid DateTime TimeSpan Cadena

Tipos de valores admitidos

Los valores del diccionario pueden ser cualquiera de los
key tipos, versiones anulables del
key tipos, Uri, IPAddress o una estructura serializable. Una estructura solo se considera serializable si cumple con todos estos criterios:

• La estructura está marcada como serializable. • Cada miembro de la estructura es: 1. Un tipo de datos primitivo (p. ej., Int32) 2. Una cadena, Uri o dirección IP 3. Una estructura serializable.

O, dicho de otro modo, una estructura serializable no puede contener ninguna referencia a un objeto de clase. Esto se hace para preservar la consistencia de la API. Agregar un objeto a un PersistentDictionary crea una copia del objeto a través de la serialización. La modificación del objeto original no modificará la copia, lo que generaría un comportamiento confuso. Para evitar esos problemas, PersistentDictionary solo aceptará tipos de valores como valores.

Puede ser serializado [Serializable] estructura Buena public DateTime? Recibió; público string Nombre; Precio Decimal público; Uri Url pública;

No se puede serializar [Serializable] estructura mala byte público[] Datos; // las matrices no son compatibles Public Exception Error; // objeto de referencia

Te invitamos a añadir valor a nuestro contenido aportando tu experiencia en las interpretaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *