Ai-je besoin d'écrire ma propre bibliothèque non géré IL à réécrire IL avec l'API de profilage CLR?

StackOverflow https://stackoverflow.com/questions/2269844

Question

J'ai regardé quelques-uns des articles pour l'API de profilage CLR, et beaucoup de ces articles parle de faire appel à la réécriture IL réelle SetILFunctionBody (); Cependant, aucun de ces articles expliquent en fait exactement ce que vous pourriez utiliser pour réécrire la méthode réels octets IL. Y at-il une bibliothèque non gérée là-bas qui me permet d'écrire IL, ou si je dois écrire un moi-même?

Était-ce utile?

La solution

Probablement. Cela dépend.

Le projet Mono a une bibliothèque appelée Cecil, que vous pouvez accéder ici:

http://mono-project.com/Cecil

Code Cependant, il a réussi, que vous ne pouvez pas appeler tout le profilage. Vous pouvez avoir une quelques options bien:

  1. Utilisez IPC. Vous pouvez lancer un nouveau processus, faire la ré-écriture à l'aide cecil dans ce processus, puis passer les octets à votre profileur en utilisant les canaux nommés.
  2. Port CECIL à C ++. distribué du code sous la licence MIT / X11, vous pouvez le faire sans avoir à partager vos modifications.
  3. Il suffit d'écrire vos propres trucs à partir de zéro.

# 1 présente un tas de complexité supplémentaire. Votre profileur finirait par avoir plus de pièces mobiles qu'il a vraiment besoin. En outre, l'IPC présente un tas de frais généraux supplémentaires.

# 2 prendrait beaucoup de temps. Étant donné que Cecil est encore qu'à la version 0.6, il pourrait ne pas être la peine le temps de le faire, par rapport à écrire votre propre implémentation.

# 3 vous donnerait le plus grand degré de contrôle, et serait probablement le plus performant. Cependant, il faudrait beaucoup plus d'efforts que # 1 serait.

Autres conseils

J'ai écrit un simple pour OpenCover https://github.com/sawilde/opencover que vous ou quelqu'un d'autre pour cette question peut trouver utile

Cet article peut avoir ce que vous cherchez http://www.codeproject.com/KB/cs/IL_Rewriting.aspx

Les octets réels doit venir de quelque part et si vous utilisez juste l'API de profilage, vous devez leur fournir vous-même. Cet article va sur la façon de le faire (probablement l'un de ceux que vous avez lu) en profondeur: http://msdn.microsoft.com/en-us/magazine/cc188743.aspx

Une technique plus « commune » est en fait d'écrire tout le code dont vous avez besoin dans la langue que vous préférez, puis le compiler à l'IL. Vous pouvez ensuite extraire les OpCodes à la conception du temps et de les stocker où vous pouvez les atteindre ou les extraire de votre compilé IL lors de l'exécution et le farcir où vous en avez besoin.

AFAIK il n'y a pas de bibliothèques non gérés pour vous aider.

Je suppose que vous voulez faire cela parce que vous voulez voir ce qui prend du temps pour que vous puissiez le faire aller plus vite (par opposition à simplement obtenir diverses informations de synchronisation). À mon humble avis, vous n'avez pas besoin de l'API de profilage, si vous pouvez lancer votre application sous un IDE et une pause au hasard. Voici pourquoi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top