Frage

Ich habe eine OutOfMemoryException früher und konnte nicht herausfinden, wofür es war. Es machte überhaupt keinen Sinn. Gegraben in meinem Code und erinnerte sich plötzlich daran, dass irgendwo vergessen hatte, nach Null zu suchen, und in diesem speziellen Fall war es (und sollte) genau das. Das sollte keine verursachen OutOfMemoryException Meiner Meinung nach, aber ich habe es natürlich an jeden Fall behoben. Und als ich das tat, erschien die Ausnahme nicht mehr!

Also habe ich den Scheck erneut entfernt und die Ausnahme studiert, die ich noch mehr bekam. Und stellte sich heraus, dass es eine hatte Innerexception des Typs NullReferenceException und eine Stapelspur, die natürlich machte viel mehr Sinn.

Aber warum habe ich eine bekommen? OutOfMemoryException? Das hat mir noch nie passiert ... macht für mich keinen Sinn ...


Würde gerne etwas mehr Kontext geben, kann aber nicht wirklich viel sagen, ohne das gesamte Projekt hochzuladen, was ich nicht kann (und das Sie sowieso nicht durchlesen möchten: P). Aber der spezifische Ort, an dem es passiert ist, sieht so aus:

            {
                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++; });
            }

Die Lösung bestand darin, eine zu setzen if(exportParameters != null) vor dem Codeblock. exportParameters ist ein List<ExportParameter>, außer in dem fehlgeschlagenen Fall, in dem es war null.

War es hilfreich?

Lösung

Möglicherweise stehen Sie vor dem Problem, dass die eingeschränkten Ausführungsregionen verhindern sollen - dh die Jitting eines Code, auf den Ihre Fangklausel angewiesen ist, verursacht den außer Speicherzustand.

(Als Antwort auf Svishs Kommentar ist dies der erste Link beim Googeln des Satzes: http://msdn.microsoft.com/en-us/library/ms228973.aspx)

Andere Tipps

Abgesehen von dem offensichtlichen Grund für eine Oomexception können Sie es auch bekommen, wenn Sie immer noch Speicher zur Verfügung haben, nur nicht ausreichend genug für das, was angefordert wird. Wenn Sie es zuverlässig und relativ in der Nähe des Starts erhalten, fordern Sie wahrscheinlich versehentlich mehr Speicher an, als Sie beabsichtigen (dh ein sehr großes Array). Können Sie etwas von Ihrem Code veröffentlichen oder zumindest Ihr Zuweisungsmuster beschreiben?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top