Ich habe eine COM-Komponente in VB6 geschrieben, die ich von einer Visual Basic .NET-Anwendung über COM-Interop verwende.Warum wirft meine COM-Komponente OutOfMemoryException, aber läuft auf VB6 gut?
Es gibt eine Methode, die beim Aufruf aus VB.NET eine OutOfMemoryException auslöst. Wenn ich genau denselben Aufruf von einer Visual Basic 6-Anwendung ausführe, funktioniert alles jedoch einwandfrei.
Ich kann hier keinen Code schreiben, weil es zu lang und schwer zu folgen ist (ich bin damit beauftragt, es zu reparieren) und ich kann das Problem nicht lokalisieren, weil, wenn ich versuche, es von VB6 zu debuggen, der Fehler nicht t auftauchen.
Was könnte dieses unterschiedliche Verhalten verursachen?
Das funktionierte einwandfrei, bis ich ein Leistungsproblem mit einem Dictionary-Objekt (ein COM von Microsoft Scripting Runtime) behoben. Wenn das Wörterbuch nicht irrational oder undicht wird, sehe ich nicht, wie es das verursachen könnte, da es niemals über 100-200 Elemente hinauswächst und nur eines erstellt wird, bevor die Ausnahme ausgelöst wird.
Ich habe das gleiche Problem mit einem Collection-Objekt und einer peinlichen Exists() -Funktion versucht und das gleiche Problem passiert. Wenn ich früh zurückgehe, indem ich Nothing zurückgebe, funktioniert es (d. H. Es wird NullReferenceException ausgelöst, wie zu erwarten wäre).
Gibt es einen sinnvollen Stacktrace? und was ist mit der Erinnerung? Wie groß ist der Prozess? –
@Simon: Stacktrace endet an der COM/.NET-Grenze. Der Prozess ist etwa 100 MB, wenn die Ausnahme über den Stapel fliegt. –
Das Scripting.Dictionary-COM-Objekt ist als STA (Apartment) gekennzeichnet, wie unten von welootty angegeben. Haben Sie das Threading überprüft? Und BTW, greifen Sie auf dieses Wörterbuch mit mehreren Threads zu? –