Question

J'ai un OutOfMemoryException Plus tôt et ne pouvait pas comprendre à quoi cela servait. Cela n'avait aucun sens. Dugd dans mon code, et se souvenait soudain que quelque part avait oublié de vérifier Null, et dans ce cas particulier, c'était (et devrait être) exactement cela. Cela ne devrait pas provoquer un OutOfMemoryException À mon avis, mais je l'ai corrigé bien sûr. Et quand je l'ai fait, l'exception n'est plus apparue!

J'ai donc retiré le chèque à nouveau et étudié l'exception que j'en ai obtenu plus. Et il s'avère qu'il avait un Innerexception du type NullReferenceException et une trace de pile que bien sûr a fait beaucoup plus de sens.

Mais pourquoi ai-je eu un OutOfMemoryException? Cela ne m'est jamais arrivé auparavant ... n'a aucun sens pour moi ...


J'adorerais donner un peu plus de contexte, mais je ne peux pas vraiment dire grand-chose sans avoir à télécharger l'ensemble du projet, ce que je ne peux pas (et que vous ne voudriez pas lire de toute façon: P). Mais l'endroit spécifique qui s'est passé ressemble à ceci:

            {
                foreach (var exportParameter in exportParameters)
                {
                    // Copy to local
                    var ep = exportParameter;

                    // Load stored values from db
                    ...
                }

                int i = 1;
                exportParameters
                    .OrderBy(ø => ø.Sequence)
                    .ForEach(ø => { if (!ø.Locked) ø.Sequence = i++; });
            }

La solution consistait à mettre un if(exportParameters != null) Avant le bloc de code. exportParameters est un List<ExportParameter>, sauf dans le cas d'échec dans lequel il était null.

Était-ce utile?

La solution

Vous pourriez être confronté au problème sur lequel les régions d'exécution contraises sont conçues pour empêcher - c'est-à-dire que le jetage d'un code sur lequel votre clause Catch s'appuie est à l'origine de la condition hors mémoire.

(En réponse au commentaire de Svish, c'est le premier lien lors de la recherche sur Google la phrase: http://msdn.microsoft.com/en-us/library/ms228973.aspx)

Autres conseils

Mis à part la raison évidente d'obtenir une omexception, vous pouvez également l'obtenir si vous avez toujours de la mémoire disponible, mais pas un morceau assez grand pour ce qui est demandé. Si vous l'obtenez de manière fiable et relativement proche, vous demandez probablement accidentellement plus de mémoire que vous en avez l'intention (c'est-à-dire en demandant un très grand tableau). Pouvez-vous publier un peu de votre code ou au moins décrire votre modèle d'allocation?

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