2010-11-20 23 views
1

Je veux fournir un moyen de télécharger des plugins (assemblages) sur un site par les utilisateurs pour une proposition de script. Grâce à mono.cecil, je peux analyser ces assemblages et limiter l'accès uniquement à une liste prédéfinie de fonctions, mais je dois aussi limiter l'utilisation de la mémoire, le temps d'exécution et tuer le thread s'il va surpasser ces ressources.Comment contrôler l'utilisation de la mémoire et le temps d'exécution d'un thread dans .Net/mono?

Je pense que je peux surveiller l'utilisation de la mémoire par l'API de profileur, mais comme je sais, il n'y a pas d'outils pour abandonner thread avec garantie. Y at-il un moyen d'annuler le fil avec garantie? Peut-être que je devrais exécuter du code en utilisant l'intégration de mono et contrôler l'exécution du thread dans une partie native d'une application, est-ce possible?

Répondre

1

Vous pouvez utiliser Thread.Abort() tant que vous n'autorisez pas le code du plugin à ResetAbort().

+0

Ce n'est pas une solution, car si un thread est bloqué au bloc finally, le thread ne peut pas être abandonné même s'il n'utilise pas ResetAbort(). – rystsov

0

Contrôle de niveau de fil n'était pas pratique à mon humble avis (tout le monde l'a fait dans le passé). Généralement, vous devez prendre en compte le contrôle au niveau du processus de l'utilisation de la mémoire ou du niveau du domaine d'application.

+0

Merci, mais selon msdn (http://msdn.microsoft.com/en-us/library/system.appdomain.unload.aspx) lorsque j'appelle AppDomain.Unload, il essaie d'abandonner les threads du domaine et si cette tentative échoue le domaine ne sera pas déchargé. – rystsov

+0

Ensuite, le contrôle de niveau de processus semble la seule option viable. Pas étonnant pourquoi IE/Chrome utilise cette approche pour éviter le blocage de la page Web. –