Comment faire pour augmenter la mémoire allouée ? {L'évaluation de la fonction a été désactivée en raison d'un manque de mémoire exception.}

Mon but est à la charge de 1,48 millions d'articles à partir de fichiers XML dans une mémoire générique collections dictionnaire à l'aide de C# ASP.NET MVC avec capacité de rendre les listes de filtre de vues. Actuellement, il travaille avec environ 1/2 millions d'articles dans mon dictionnaire comme un utilisateur unique dans VS le mode de débogage. Plus je sors de la mémoire des erreurs de droit maintenant, je reçois: mondictionnaire.Résultats d'inventaire dans le Système.TypeInitializationException - " L'évaluation de la fonction a été désactivée en raison d'un manque de mémoire exception.'

Dans le passé, il a également été mscorlib.dll durant la charge de XML Dict que s'est plaint au sujet de la mémoire.

J'ai beaucoup de mémoire système à gauche, comment puis-je donner de plus à cette application Web MVC? BTW, j'ai essayé de fichier XML en Perl Dictionnaire et il fonctionne très bien, avec 1,5 million d'objets - pas de problème. Je ne souhaite pas écrire mon application en Perl. Si Perl peut le faire, C# doit être en mesure de le faire - je juste n'ont pas été en mesure de trouver une solution de recherche sur le web encore.

Exemple De Code:

Dictionary<string, msg> masterDictionary = new Dictionary<string, mgs>();

foreach (string file in filePath)
{
    XDocument xdoc = XDocument.Load(file);
    Dictionary<string, msg> fileDictionary = xdoc
        .Descendants("msg")
        .ToDictionary(m => m.Element("msgId").Value,
                      m => new msg
                           {
                               msgId = m.Element("msgId").Value,
                               msgType = m.Element("msgType").Value,
                               name = m.Element("name").Value
                           });

    //now insert your new values into the master
    foreach(var newValue in fileDictionary)
        masterDictionary.Add(newValue.Key, newValue.Value);
}
Vous n'avez pas de code qui permet à quiconque de savoir exactement combien vous essayez de charger en mémoire
Également la .Net runtime peut utiliser beaucoup de mémoire -- quelques centaines de MO dans certains cas. Je sais que vous avez utilisé pour jamais obtenez plus de 2 go est un CLR, même lors de l'utilisation de windows 64 bits, je ne sais pas si cela est vrai dans le noyau récent CLR versions.
L'exécution de la performance Monditory il semble que j'ai environ 10 concerts de rechange.
pas clair ce que votre commentaire n'a "jamais obtenez plus de 2 go, mais les deux x86/x64 ne permettent pas une allocation unique d'être plus grand que 2 go de ram (à l'exception de les tableaux ) . En 32 bits, vous devriez être en mesure d'utiliser jusqu'à 4 go de mémoire (en supposant que votre OS est de 64 bits, mais le processus est x86), sur x64 vous ne devriez pas avoir OOM exceptions en raison de la quantité de mémoire allouée, mais seulement en raison de leur taille.
Je crois que le asp.net la pile s'exécute dans un 2 GO de processus, et la pile peut utiliser quelques centaines de meg lui-même.

OriginalL'auteur Bill | 2013-10-30