Temps d'execution d'un composant COM

Signaler
Messages postés
29
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
27 août 2007
-
Messages postés
29
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
27 août 2007
-
Bonjour,

En fait j'aurai voulu savoir pour quelle raison un executable et une dll (objet com) n'ont pas le même temps d'execution bien qu'il soient finalement identiques?
Je mexplique j'ai generé une DLL et un EXE a partir de mon projet avec VS2003.
Lorsque je lance l'exe a partir du prompt il met 20 secondes, par contre quand je le lance à partir d'une page ASP en tant que composant COM il m'est plus de 90 secondes!
A quoi ca serait dû ? ne serait il pas possible d'obtenir les mêmes perfomances quand lancant le .exe mais toujours à partir d'une page ASP ?

Merci d'avance pour votre réponse.

9 réponses

Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
16
salut,

des pistes :
http://www.thescripts.com/forum/thread227347.html

tu exécutes ton exe en tant que serveur exe activex automation ? ou alors tu appelles ta dll depuis asp ?

du plus il est normal que le marshalling com pour fournir à asp ralentisse légèrement la dll mais pas à ce point...

ShareVB
Messages postés
29
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
27 août 2007

En fait j'execute la dll à partir d'une page ASP et c'est là que ca mets du temps..
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
16
salut,

est-ce que tu utilises des threads dans ton .net ? est-ce que cela met du temps au premier appel d'une méthode et pas au second ? essaies d'exécuter ton exe .net "en tant que" l'utilisateur sous lequel tourne IIS et ASP...sinon, donne au moins le prototype de la méthode que tu appelles...

ca ne te lève pas d'exception ? ca met juste du temps pour marcher ?

ShareVB
Messages postés
29
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
27 août 2007

Dslé j'aurai du pensé à mettre mon code avant. Par contre j'utilise pas vraiments de threads. Mai voici la signature de ma méthode en C# :
public

void convertAll(
string file){
StreamReader src =
new StreamReader(System.IO.File.OpenRead(file), System.Text.Encoding.Default);
...
}
Et voici comment je l'appelle à partir de la page ASP :
set ob_convertissor = Server.CreateObject("DetectLanguageProcess.util.ConvertToTree")

ob_convertissor.convertAll("path\ToConvert.txt")    <- c'est ca qui m'est beaucoup de temps.

Que je le lance une ou plusieurs fois, ca mets toujours autant de temps... alors je sais pas pkoi..

En tout cas merci de m'aider
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Salut,

Que fait tu d'autre dans cette méthode ?
Est ce qu'elle produit le résultat attendu ou pas ?
Est ce que le passage du chemin d'accès complet au fichier au lieu du chemin relatif change quelquechose ?

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
29
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
27 août 2007

Je viens de tester avec un chemin relatif et absolu, j'obtient les mêmes resultats.
Le résultat est bien celui attendu mais trés long a obtenir.
En fait cette méthode elle prend des gros dictionnaires (par exemple le francais) le segmente en sous fichiers (26), un pour chaque lettre de l'alphabet et y inscrit tous les mots commencants par cette lettre. Ensuite il reprends tous ces fichiers pour les linéarisés(c'est à dire dans une forme avec laquelle un autre programme de lecture puisse les convertir en arbre indexé.).
Sinon c'est vrai que dans mon code, j'ai tout de même utilisé des verrous (un Mutex), mais il ya pas de raison qu'il bloque à partir d'une page ASP et pas à partir de mon .exe ..
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Ce n'est pas vraiment le même contexte.
Il doit probablement y avoir plus de vérifications dans un cas que dans l'autre, notamment au niveau des accès disque.
Le type de thread utilisé ne dois pas non plus être le même
Après pour le coup du Mutex c'est à voir, je ne connais pas vraiment le fonctionnement dans ce contexte.
Maintenant que tu sais que c'est l'execution de la méthode qui est longue, tu n'as "plus qu'à" tracer pour déterminer quelle portion du code provoque celà.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
16
salut,

c'est peut être une histoire de MTA/STA, je crois que ASP ne sait utiliser que STA c'est à dire un thread ne peut accéder qu'à ses données mais pas à celle des autres threads...si tu as des mutex, c'est surement que tu as plusieurs threads et donc cela peut être venir de là, car comme le thread qu'utilise ASP en interne est en STA, je pense que les autres threads que lance ta dll le deviennent aussi (alors qu'ils s'attendent à MTA), ce qui fait que les données sont marshallées "par valeurs" entre threads ce qui peut causer des lenteurs...enfin, ca doit être un truc dans le genre parce que MTA/STA sont assez compliqués...

des liens en vrac :
http://support.microsoft.com/?scid=kb%3Ben-us%3B308095&x=18&y=16
http://www.zdnet.fr/builder/architecture/services_web/imprimer.htm?AT=39144266-39021055t-39000780c
http://www.codeguru.com/cpp/com-tech/activex/apts/article.php/c5551/

ShareVB
Messages postés
29
Date d'inscription
mardi 12 avril 2005
Statut
Membre
Dernière intervention
27 août 2007

Ben en fait si tu veux j'ai utilisé des Mutex, mais j'ai pas declaré de threads quelconque par rapport à l'application. En fait je me suis dit quand lancant par exemple deux page Web qui utiliserai ma dll, serait équivalent à lancer deux threads d'un même programme. C'est pour cela que j'ai décidé de mettre des verrous. Mais je m'avance peut être un peu trop en disant ca ...
Je vais regarder les liens un peu pour comprendre le MTA/STA, qui m'est totalement inconnu.

Cordialement,