2009-05-10 4 views
0

J'utilise AspCompat attribut page ASP.NET pour que les composants COM I appel peut obtenir des objets intrinsèques ASP (demande, réponse, demande, etc.)AspCompat performances question

J'ai rapidement créé un nouveau projet de test, une page asp.net et un composant vb6 com.

La page ne présente:

for (int i = 0; i < 1000; i++) 
      Application["string" + i] = i.ToString(); 
     Debug.WriteLine(string.Format("{0} done adding strings to app",Environment.TickCount)); 
     var asp = new ASPTest.CompClass(); 
     asp.SetProcessId(); 

Fondamentalement, j'ajouter des choses dans l'objet d'application, puis appeler le composant com. Le problème est que plus le contenu que je mets dans l'application est lent, plus le code vb devient lent. Pas tout le code cependant, juste quand j'essaye d'invoquer une méthode sur des objets intrinsèques, dans mon exemple mon premier appel resp.Write. Si j'ajoute 10000 éléments dans l'application resp.Write prend dix secondes pour terminer, 60000 => timeout.

Il semble que lorsque je touche un objet intrinsèque pour la première fois le moteur d'exécution fait quelque chose de désagréable à rendre les objets disponibles à COM.

Avez-vous déjà vu ça? Toute suggestion est très appréciée.

Répondre

0

Ceci est certainement un problème avec le filetage, ayant sans doute le contexte de thread exécutant Interop passe à chaque appel du composant VB aux classes dans le contexte. Je ne suis pas l'expert ici, donc je pourrais (probablement wil) être corrigé, mais je crois que vous devez vous assurer que votre composant VB est également STA, tout comme la page ASP.NET marquée avec aspcompat = true le définit. Si vous gardez tous les composants dans le même thread, il n'y aura pas de commutateurs de contexte (ce qui nécessite un marshalling très coûteux).

+0

filetage est très bien, il y a quelque chose au sujet de la quantité de données que je mets dans l'objet Application. Si je mets quelques objets seulement il n'y a pas de retard. –

+0

Eh bien, non, cela sonnera exactement comme un goulot d'étranglement - plus il y en a dans Application, plus il faudra en organiser. La série d'articles « Debugging de production pour les applications .NET Framework »

+0

comment expliqueriez-vous que cela se produit seulement la première fois que je touche un objet de contexte? après le premier appel, tout va vite. –