Question

Je dois stocker un dictionnaire dans un fichier aussi vite que possible. Les deux clé et la valeur sont des objets et non garantis à marquer comme Serializable. De plus, je préfère une méthode plus rapide que sérialisation des milliers d'objets. Alors j'ai regardé dans le support des fichiers mémoire mappée dans .NET 4. Cependant, il semble que MemoryMappedViewAccessor permet le stockage de struct et pas les types de référence.

est-il un moyen de mémorisation de la mémoire utilisée par un type de référence d'un fichier et la reconstruction de l'objet à partir de cette goutte de mémoire (sans sérialisation binaire)?

Était-ce utile?

La solution

Les fichiers mappés en mémoire sont fondamentalement incompatibles avec le collecteur des ordures. Ce qui est pourquoi il a fallu si longtemps pour une telle caractéristique principale du système d'exploitation pour obtenir pris en charge par .NET. Les types de référence doivent être sérialisé à la vue MMF, MemoryMappedViewStream, pas moyen de contourner cela. Une restriction similaire existe dans le code non géré, des objets avec des pointeurs doivent être aplati de sorte que le objets pointés sont visibles dans la vue aussi bien.

Que vous sérialisation à un MMF ou à un fichier ne fera aucune différence, le cache du système de fichiers est mis en œuvre avec des FMM ainsi. écriture de fichiers sont très rapide, aussi longtemps que les crises de données écrites dans la mémoire disponible mappable. Si c'est un problème puis regardez à un système d'exploitation 64 bits pour résoudre ce problème.

Autres conseils

Je crois que le stockage d'un blob de mémoire est tout simplement inapplicable parce que la mémoire, si elle a des types de référence, aura des pointeurs vers d'autres blocs de mémoire qui sera probablement pas appliquer la prochaine fois que le fichier est accessible. Voilà pourquoi existe sérialisation binaire: pour maintenir ce genre de références. Si vous voulez vraiment un contrôle serré, cependant, j'utiliser System.IO.BinaryWriter et BinaryReader d'avoir un contrôle total sur exactement ce qui est écrit dans le fichier dans quel ordre, tout en minimisant les frais généraux.

Ceci est le type de scénario qui sérialisation binaire a été conçu pour. Y at-il une raison spécifique pour laquelle vous ne voulez pas l'utiliser? Avez-vous vérifié qu'il est « trop lent »? Bien sûr, vous pouvez coder votre propre sérialiseur personnalisé et faire probablement plus efficace pour votre scénario spécifique, mais vous devrez le maintenir à l'avenir. Est-il en vaut la peine?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top