Question

J'ai un projet qui a un objet (classe) (classe) imbriqué (classe) dans un dictionnaire référencé dans un dictionnaire comme:

public static Dictionary<string, Object1> DObject { get; set; }

Object1 est une classe compliquée. Ce n'est pas comme une classe "carnet d'adresses" ou "Info de la personne". La classe elle-même a des tableaux, des dictionnaires d'un autre objet. Ces objets font référence à la classe au-dessus, etc.

Étant donné que la taille du dobject peut être de 1 Go + en mémoire, je vais le sérialiser dans un fichier utilisant BinaryFormatter. Parce que j'ai besoin de charger cet objet, je pensais utiliser MemoryMaptFile. De nouvelles clés et valeurs peuvent être ajoutées au dictionnaire. Les objets peuvent contenir plus de données (ajouté / mis à jour), etc. Le MMF change-t-il la taille? Comment accéder à une certaine clé dans le Dobject dans le fichier mappé de mémoire? Existe-t-il un mécanisme de recherche comme un hashtable en mémoire afin que je puisse trouver une certaine clé comme un dictionnaire et obtenir sa valeur? Comment fonctionne ce MMF de toute façon?

Ma pensée idéale est. Avoir un grand fichier sur le disque (2 Go +). Je met à jour l'objet dans le dictionnaire rapidement sur le disque comme avoir une mémoire enregistrée sur le disque. Tout est rapide. Valeur clé recherche tout le long. Je recherche, modifie la valeur, enregistre, etc ... Je devrais avoir un accès rapide à cet objet de 2 Go + à tout moment. Si le serveur WCF redémarre, j'aurais besoin d'un accès rapide à cet objet de taille 2 Go +. C'est pourquoi je pensais 1) la sérialisation 2). Charge et lecture de / à MMF. Ma principale préoccupation est la vitesse en ce moment. Je ne peux pas recharger ces données de 2 Go à partir de zéro à chaque fois que je débogage du projet en d'autres termes (cela prend longtemps).

Toutes les suggestions, idées et réflexions sur la façon dont je devrais gérer cette situation.

Était-ce utile?

La solution

Tu ne peux pas garder DObject lui-même dans un fichier mappé de mémoire. Les objets .NET ont tendance à se déplacer tout le temps, et vous ne pouvez pas les forcer à rester au même endroit en mémoire (vous pouvez les épingler, mais vous ne voulez vraiment pas). Vous pouvez sérialiser l'objet et l'écrire dans le fichier, mais cela signifierait écrire plus de 1 Go de données à chaque fois.

Pourquoi ne pas suivre la voie standard et «sérialiser» votre objet à un ensemble de tables de base de données?

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