sam-123 Posté(e) le 26 février 2010 Posté(e) le 26 février 2010 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 peuxSi je comprends bien on met le :• Trans.commit() pour confirmation • Trans.dispose() pour libération de la mémoireMaintenant 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 ensembleDonc 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 ?
(gile) Posté(e) le 26 février 2010 Posté(e) le 26 février 2010 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 UsingEst é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 COMDans 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
sam-123 Posté(e) le 26 février 2010 Auteur Posté(e) le 26 février 2010 Non, il faux mettre « End Using » c’est encore un oubli de ma part ;)
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant