Aller au contenu

Messages recommandés

Posté(e)

Bonjour a tous et a toutes,

Voila une question de culture générale (la mienne question vbnet est un peux limite)

C’est l’emploient du « commit » et « dispose » qui me brouille un peux

Si je comprends bien on met le :

• Trans.commit() pour confirmation

• Trans.dispose() pour libération de la mémoire

Maintenant j’ai un programme qui en appelle d’autre ex :

Programme principale

 Public sub Principale ()
. . .
. . .
Using LockDoc As DocumentLock = MyDWG.LockDocument()
Using MyTrans As Transaction = MyDb.TransactionManager.StartTransaction
REM si je ne met pas un “MyTrans.Dispose ()” ici le programme bloque
. . .
. . .
Premier ()
Second ()
. . .
. . .
MyTrans.Commit()
MyTrans.Dispose()
End sub

 

Programme n°1

 

 Public sub premier ()
. . .
. . .
Using LockDoc As DocumentLock = MyDWG.LockDocument()
Using MyTrans As Transaction = MyDb.TransactionManager.StartTransaction
. . .
. . . 
MyTrans.Commit()
MyTrans.Dispose()
End sub

 

Programme n°2

 Public  sub Second ()
. . .
. . .
Using LockDoc As DocumentLock = MyDWG.LockDocument()
Using MyTrans As Transaction = MyDb.TransactionManager.StartTransaction
. . .
. . . 
MyTrans.Commit()
MyTrans.Dispose()
End sub

 

Dans les programmes (premier et second) ils sont appelés séparément et ensemble

Donc le commit et dispose je crois qu’ils sont bien employer ?

Dans le programme principal je crée des objets puis j’appelle le programme « premier et second »

Donc la aussi il faut un commit() et dispose()

Ou alors je me brouille de nouveaux les pinceaux ?

 

 

 

Posté(e)

Salut,

 

Commit() valide les modifications qui ont été faites par la transaction dans la Database. Il n'est donc pas nécessaire de l'invoquer si la Database n'a pas été modifiée.

 

Dispose() libère les ressources. Il est indispensable de le faire pour tous les nouveaux objets (new) qui implémentent Idisposable, mais il n'est pas nécessaire de le faire pour les objets qui sont ajoutés à la Database ou ceux qui sont ouverts par la transaction, ils seront automatiquement libérés quand la transaction le sera.

 

L'utilisation d'un bloc Using appelle automatiquement Dispose() à la fin du bloc (End Using).

Il est donc absolument inutile d'appeler Dispose() pour un objet qui est paramètre de Using, par contre il est obligatoire d'appeler End Using pour libérer les ressources.

De plus un bloc Using correspond à une instruction Try/Finally et garantit la libération de la mémoire même si un évènement survient à l'intérieur du bloc (voir ici).

Par exemple :

Using MyTrans As Transaction = MyDb.TransactionManager.StartTransaction
   '...ici l'utilisation de la transaction
   MyTrans.Commit()
End Using

Est équivalent à

MyTrans As Transaction = MyDb.TransactionManager.StartTransaction
Try
   '...ici l'utilisation de la transaction
   MyTrans.Commit()
Finally
   MyTrans.Dispose()
End Try

 

LockDocument verrouille le document pour éviter les conflits possibles avec une autre application ou un utilisateur pendant que le processus modifie le document. Ceci est nécessaire quand :

- on agit sur un document ouvert autre que le document actif,

- on agit sur le document depuis un formulaire Modeless,

- on définit des commandes avec l'attribut CommandFlags.Session

- on utilise un serveur COM

Dans les autres cas c'est inutile.

Là aussi l'utilisation d'un bloc Using doit se terminer par un End Using voir ici > Control the AutoCAD Environment > Lock and Unlock a Document.

 

Encore une fois, avant de vouloir programmer AutoCAD avec .NET, il est indispensable d'avoir certaines bases de .NET dans un environnement Windows et de Programmation Orientée Objet.

 

PS : je suis fort étonné que Visual Studio accepte de compiler un code avec des instructions Using qui ne s'achèvent pas par un End Using. Si c'est le cas, je trouve ce laxisme inacceptable pour un langage de programmation et me réjouis d'avoir choisi C# plutôt que VB.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é