Domanda

Sono stato a guardare alcuni degli articoli per l'API CLR Profiling, e molti di questi articoli parlo di chiamare SetILFunctionBody () per fare l'attuale IL riscrittura; Tuttavia, nessuno di questi articoli in realtà spiegare esattamente quello che si potrebbe utilizzare per riscrivere l'attuale metodo IL byte. C'è una libreria gestita là fuori che mi permette di scrivere IL, o avrei dovuto scrivere uno io?

È stato utile?

Soluzione

Probabilmente. Dipende.

Il progetto Mono ha una libreria chiamata Cecil, cui è possibile accedere qui:

http://mono-project.com/Cecil

Codice Tuttavia è gestito, che non è possibile chiamare durante il profiling. Potrebbe essere un avere alcune opzioni se:

  1. Utilizza IPC. Si potrebbe generare un nuovo processo, facendo la riscrittura utilizzando Cecil in questo processo e quindi passare il byte di nuovo al vostro profiler utilizzando named pipe.
  2. Port CECIL a C ++. Del codice distribuito sotto licenza MIT / X11, in modo che si possa fare questo senza dover condividere le modifiche.
  3. Basta scrivere il proprio roba da zero.

# 1 introduce una serie di complessità in più. Il vostro profiler finirebbe con l'avere più parti in movimento di quanto realmente necessario. Inoltre, l'IPC introduce una serie di spese generali supplementari.

# 2 sarebbe voluto molto tempo. Dato che Cecil è ancora solo in versione 0.6, potrebbe non essere la pena il tempo per farlo, vs scrivere una propria implementazione.

# 3 darebbe il massimo grado di controllo, e sarebbe probabilmente la più performante. Tuttavia ci vorrebbe sostanzialmente più sforzo che # 1 sarebbe.

Altri suggerimenti

ho scritto un semplice uno per OpenCover https://github.com/sawilde/opencover cui si o chiunque altro per quella materia può trovare utile

Questo articolo può avere ciò che si sta cercando http://www.codeproject.com/KB/cs/IL_Rewriting.aspx

I byte effettivi deve venire da qualche parte e se sono solo utilizzando l'API Profiling è necessario fornire loro stessi. Questo articolo va approfondito su come farlo (probabilmente uno di quelli che hai letto): http://msdn.microsoft.com/en-us/magazine/cc188743.aspx

Una tecnica più 'comune' è quello di scrivere in realtà tutto ciò che è necessario il codice in qualsiasi lingua che preferite e poi compilarlo a IL. È quindi possibile estrarre i OpCodes in fase di progettazione e di memorizzarli in cui è possibile raggiungere o estrarli dal vostro compilato IL a run-time e roba dove serve.

Per quanto ne sappia non ci sono le librerie non gestite per aiutarvi con questo.

Presumo che si vuole fare questo perché si vuole vedere cosa sta prendendo tempo in modo che si può farlo andare più veloce (al contrario di ottenere solo informazioni varie timing). IMHO, non è necessario l'API di profilatura, se è possibile eseguire la vostra applicazione sotto un IDE e mettere in pausa a caso. ecco perché.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top