Donc this me dit que je devrais mettre un GC.KeepAlive à la fin de mon code pour garder mon mutex ouvert (pour éviter que plusieurs instances de mon application ne se produisent en raison de la mise à disposition précoce de mon mutex par le GC). Mais dois-je mettre le KeepAlive dans mon bloc finally ou à la fin de mon bloc try?Devrais-je mettre KeepAlive dans mon bloc finally?
Répondre
Personnellement, je n'utiliserais pas cette approche. Le problème est que vous devez avoir quelque chose utiliser le mutex après que votre code d'application (dans ce cas, le formulaire) soit terminé, ou il sera candidat pour les post-optimisations du CPG.
Depuis Mutex implements IDisposable, vous pouvez aussi le faire facilement:
[STAThread]
static void Main() // args are OK here, of course
{
bool ok;
using(var mutex = new System.Threading.Mutex(true, "YourNameHere", out ok))
{
if (!ok)
{
MessageBox.Show("Another instance is already running.");
return;
}
Application.Run(new Form1());
}
}
Cela fonctionne tout aussi bien, puisque la finalement créée par l'instruction à l'aide empêchera le mutex d'être un candidat de GC. Personnellement, je trouve ce code moins déroutant et plus propre. Cela étant dit, si vous voulez suivre l'approche à partir de ce lien, en mettant KeepAlive n'importe où, le mutex ne sera pas collecté et empêchera le problème. Vous pouvez le mettre à l'intérieur de votre try ou finalement bloquer - tant que c'est après que le code de l'application principale "se termine". Vous pouvez également ignorer ceci et juste explicitement Dispose()
le mutex - tant que vous utilisez le mutex d'une manière ou d'une autre, tout ira bien.
- 1. Définir la référence = null dans le bloc finally?
- 2. Puis-je avoir une logique métier dans le bloc Finally?
- 3. Pouvez-vous définir quelle couleur VS2008 utilise pour mettre en évidence un bloc finally?
- 4. Si une fonction être utilisée dans le bloc d'essai qui doit être exécuté dans finally
- 5. Comment puis-je détecter une exception ThreadAbortException dans un bloc finally? (.NET)
- 6. MOSS 2007 KeepAlive fichier
- 7. Est-il légal et possible d'accéder à la valeur de retour dans un bloc finally?
- 8. Accéder à la valeur retournée par une fonction dans un bloc finally
- 9. Quel est l'équivalent du bloc try-finally dans la fondation de workflow?
- 10. Marshal.FreeHGlobal doit-il être placé dans un bloc finally pour s'assurer que les ressources sont éliminées?
- 11. Python Débutant: Comment empêcher l'exécution de 'finally'?
- 12. ASP.Net: exécution de code Keepalive
- 13. richfaces keepAlive ne fonctionne pas
- 14. La clause fast fast finally dans Java
- 15. Ce qui est plus rapide - un bloc en utilisant ou try/catch/finally
- 16. Panneau modal Richfaces et a4j: keepAlive
- 17. Mettre un bloc à l'intérieur d'un autre dans Django
- 18. Dans quelles circonstances @finally n'est-il pas redondant dans la procédure d'exception try/catch/finally de Cocoa?
- 19. Comment implémenter `finally` pour un cas d'erreur en Java
- 20. Apache MaxClients lorsque KeepAlive est désactivé
- 21. Où mettre mon code sqlalchemy dans mon script?
- 22. Comment mettre un vecteur dans mon arrayadapter?
- 23. Mettre un 'terminal' dans mon application?
- 24. Dans quelles situations dois-je mettre mon code dans un bloc -beginUpdates -endUpdates, et quand est-il optionnel?
- 25. Mon bloc de programmes de threads
- 26. try-catch-finally jeter exception problème Java
- 27. bloc de classe principale dans '{}' exécute jamais
- 28. Comment mettre en œuvre Ticker dans mon application dans l'iphone
- 29. pour mettre un bloc sur une seule ligne
- 30. Utiliser une classe générale pour l'exécution avec try/catch/finally?
Voir ceci: http://stackoverflow.com/questions/635640/gc-keepalive-versus-using –