J'ai un composant COM écrit en VB6 que j'utilise depuis une application Visual Basic .NET via COM interop.Pourquoi mon composant COM lance OutOfMemoryException, mais fonctionne correctement sur VB6?
Il existe une méthode qui déclenche une exception OutOfMemoryException lorsqu'elle est appelée à partir de VB.NET. Toutefois, lorsque je cours le même appel à partir d'une application Visual Basic 6, tout fonctionne correctement.
Je ne peux pas poster de code ici parce qu'il est trop long et difficile à suivre (je suis chargé de le réparer) et je ne peux pas identifier le problème, car lorsque j'essaie de le déboguer de VB6, l'erreur ne t montrer.
Qu'est-ce qui pourrait causer ce comportement distinct?
Cela fonctionnait correctement jusqu'à ce que j'ai résolu un problème de performances à l'aide d'un objet Dictionary (un COM de Microsoft Scripting Runtime). À moins que le dictionnaire ne se développe de manière irrationnelle ou fuit, je ne vois pas comment cela pourrait causer cela, puisqu'il ne dépasse jamais 100-200 éléments et qu'un seul est créé avant que l'exception ne soit lancée.
J'ai essayé le même correctif avec un objet Collection et une fonction Exists() maladroite et le même problème se produit. Si je rentre tôt en retournant Nothing, cela fonctionne (c'est-à-dire, il renvoie NullReferenceException, comme prévu).
Existe-t-il une pile de pile significative? et qu'en est-il de la mémoire? Quelle est la taille du processus? –
@Simon: stacktrace se termine à la limite COM/.NET. Le processus est d'environ 100 Mo lorsque l'exception survole la pile. –
L'objet COM Scripting.Dictionary est marqué comme STA (Appartement), comme indiqué ci-dessous par weloytty, avez-vous vérifié le filetage? Et BTW, accédez-vous à ce dictionnaire en utilisant plusieurs threads? –