Aller au contenu

Appel de fonction trop long


Messages recommandés

bonjour

 

je suis arrivé à ce point avec l'utilsation de stopwatch

un phenomène!

 

la durée totale est de 4823msecondes

 

sw.Start()

 

armature(acBlkTblRec, acCurDb, acTrans, New Point3d(origTextX, origTextY, 0))

 

sw.Stop()

total = sw.ElapsedMilliseconds

Dim ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor

ed.WriteMessage(vbLf & "Durée totale: " & total & "millisecondes")

 

 

 

Mais en exécutant stopwatch à l'interieur de ma fonction, la durée totale est de 25 msecondes

 

Public Sub armature(ByRef acBlkTblRec As BlockTableRecord, ByRef acCurDb As Database, ByRef acTrans As Transaction, _

ByVal origTEXT As Point3d)

 

sw.Start()

-...

-..

-

-

sw.Stop()

total = sw.ElapsedMilliseconds

Dim ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor

ed.WriteMessage(vbLf & "Durée totale: " & total & "millisecondes")

End Sub

 

 

Ou est le problème?

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

À mon avis il faudrait déterminer si cette différence de temps d'exécution est due au contexte du chronométrage (depuis la méthode appelante ou depuis l'intérieur de la méthode appelée) ou bien si le temps d'exécution proche de 5 secondes n'apparaît pas uniquement à la première exécution dans une session AutoCAD (quel que soit de contexte de chronométrage).

 

Si le temps est notablement réduit pour les exécutions suivantes, c'est probablement dû à la compilation JIT (Just In Time) du code CIL (Common Intermediate Language) en code exécutable (cette compilation n'ayant lieu qu'à la première exécution).

Dans ce cas, je me pencherais sérieusement sur l'optimisation du code de "armature" car je n'ai jamais rencontré de méthode qui nécessite près de 5 secondes pour la compilation JIT.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

C'est exactement le cas; le temps est notablement réduit pour les exécutions suivantes(de l'ordre de 30milisec) et à la première exécution il est aux environ de 5sec, c'est à dire à la première exécution d'AutoCAD.

 

Donc dois'je optimiser mon code,peut etre que le problème est là?

car dans l'ecriture de mon code je fais appel à d'autres codes! ce qui ralentit l'exécution

peut être dans la declaration des codes : publique/privée

 

et comme vous l'avez mentionner c'est à la première exécution d'AutoCAD!

Merci pour l'attention.

Lien vers le commentaire
Partager sur d’autres sites

Le problème semble donc bien venir de la compilation JIT (voir ce sujet).

Il faut donc regarder du côté du code de la méthode 'armature' et des méthodes qu'elle appelle (la compilation JIT se fait au premier appel de chaque méthode).

 

Je ne pense pas que les modificateurs d'accès comme public, private, internal, ou protected influent beaucoup sur le temps de compilation d'une méthode, par contre l'utilisation de la liaison tardive (implicite avec Object en VB si l'option strict est désactivée) peut considérablement ralentir l'exécution. Il est aussi possible que l'utilisation de l'interface COM ait une influence sur les performances.

 

Ce ne sont bien sûr que des suppositions, n'ayant vu aucun code.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

par contre l'utilisation de la liaison tardive (implicite avec Object en VB si l'option strict est désactivée) peut considérablement ralentir l'exécution. c'est à dire?

 

Si tu utilises Option Strict = On, VB ne fera plus de conversion implicite (comme en C#) et n'autorisera plus la liaison tardive (late binding) implicite avec le type Object.

Voir ce message ou la rubrique V-N-3 (spécialement V-N-3-c) de ce tuto.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Exactement c'est tout rouge, dépasse 102 err

 

genre,

 

Option Strict On disallows implicit conversions from 'Autodesk.AutoCAD.DatabaseServices.DBObject' to 'Autodesk.AutoCAD.DatabaseServices.BlockTableRecord'.

 

 

 

Option Strict On disallows operands of type Object for operator '='. Use the 'Is' operator to test for object identity.

If ComboBox1.SelectedItem = "PotRive 1 " Then..

 

 

Option Strict On disallows implicit conversions from 'Object' to 'Integer'....

Arm(i) = DiamCoin2.SelectedItem

replace with

CInt(DiamCoin2.SelectedItem).

 

la liste est longue

Lien vers le commentaire
Partager sur d’autres sites

Comme expliqué dans les articles en lien, en voulant faciliter les choses, VB permet d'écrire du code moins sûr et peu efficient.

C'est une des raison pour lesquelles j'ai toujours préconisé d'utiliser C#, ou, pour les inconditionnels du VB, d'activer l'option Strict.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

c'est des choses que j'ignorai

même dans les cours d'apprentissage je ne suis pas tomber sur ce focus"activation de Option Strict"

sinon pourquoi perdre du temps car je suis toujours en train de faire les rectifications.

j'apprends toiujours ! et je paie de mon ignorance.

merci, je vous aviserai une fois terminer

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

tout est ok!

je suis parti des 5 secondes à environ 2 secondes et celà à la prelmère utilisation d'autocad

et aux utisations suivantes à environ 100 ms

Je trouve que c'est un gain de temps considerable.

 

Une autre question, n'est il pas plus utile que je converti le tout à C#?

peut etre que je gagnerai plus de temps, vu la difference de compilation entre les langages?

merci

Lien vers le commentaire
Partager sur d’autres sites

Une autre question, n'est il pas plus utile que je converti le tout à C#?

peut etre que je gagnerai plus de temps, vu la difference de compilation entre les langages?

merci

 

Si tu veux te convertir au C#, je ne peux que t'encourager. Tu trouveras plus d'exemples que tu pourras lire plus facilement.

Sinon, avec l'option Strict = On, Visual Studio t'obligera à écrire du code VB aussi rigoureux en terme de typage qu'avec C#.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité