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);
}
É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
Vous devez vous connecter pour publier un commentaire.
Ce NE régler le problème. Je suis toujours limité à 2 GO de mémoire à partir de l'intérieur de VS 2013 en mode de débogage. Cependant, lors du déploiement de IIS7.5, 2008 R2 Serveur et l'Application. Piscine de dot net 4.0 x, je peux l'utiliser beaucoup plus de mémoire pour mon site. Il a pris le paramètre suivant dans mon web.config. J'ai maintenant besoin de remonter mon physique de 8 à 16 Sgb; Mais, c'est une autre histoire. Solution:
https://msdn.microsoft.com/en-us/library/hh285054(v=vs. 110).aspx
OriginalL'auteur Bill
Entre BeginUpdate() et EndUpdate(), la collecte des Ordures résolu le problème pour moi en 32 et 64 bits.
GC.Collect();
GC.WaitForPendingFinalizers();
OriginalL'auteur Soumen