Pregunta

necesito para almacenar un diccionario en un archivo lo más rápido posible. Tanto la clave y el valor son objetos y no garantiza que sea marcado como serializable. También prefiero un método más rápido que la serialización de miles de objetos. Así que busqué en los archivos de memoria asignada apoyo en .NET 4. Sin embargo, parece MemoryMappedViewAccessor sólo permite el almacenamiento de estructuras y no los tipos de referencia.

¿Hay una manera de almacenar la memoria usada por un tipo de referencia de un archivo y reconstruir el objeto de esa burbuja de memoria (sin la serialización binaria)?

¿Fue útil?

Solución

archivos de memoria asignada son fundamentalmente incompatibles con el recolector de basura. Que es por qué se tardó tanto tiempo para un principal característica de dicho sistema operativo para obtener el apoyo de .NET. Tipos de referencia tienen que ser serializado a la vista MMF, MemoryMappedViewStream, no hay manera de evitar eso. Existe una restricción similar en código no administrado, los objetos con los punteros necesitan ser aplanada de modo que la punta-a objetos son visibles en la vista también.

Ya sea que los serializa a un FMM o en un archivo no hará ninguna diferencia, la caché del sistema de archivos se implementa con los FMM también. escrituras de archivo son muy rápido, siempre y cuando los ajustes de datos escritos en la memoria asignable disponible. Si eso es un problema, entonces mirar a un sistema operativo de 64 bits para resolver ese problema.

Otros consejos

Creo que el almacenamiento de una masa de memoria es simplemente inviable debido a que la memoria, si dispone de los tipos de referencia, tendrá referencias a otros bloques de memoria que probablemente no se aplicarán la próxima vez que se accede al archivo. Es por eso que existe la serialización binaria: para mantener este tipo de referencias. Si realmente quiere un control estricto, sin embargo, me gustaría utilizar System.IO.BinaryWriter y BinaryReader tener un control total sobre exactamente lo que se escribe en el archivo y en qué secuencia, mientras que minimizan los gastos.

Este es el tipo de escenario que serialización binaria fue diseñado. ¿Hay alguna razón específica por la cual usted no desea utilizar eso? ¿Ha comprobado que es 'demasiado lento'? Claro, usted puede codificar su propia serializador personalizado y probablemente hacerlo más eficiente para su situación específica, pero entonces tendrá que mantenerla en el futuro. ¿Vale la pena el esfuerzo?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top