PowerShell: prestazioni delle chiamate ai metodi .NET
-
03-07-2019 - |
Domanda
È possibile chiamare un metodo .NET da PowerShell con associazione anticipata?
Ho uno script della pipeline che chiama un singolo metodo .NET nel processo {...}
. PowerShell chiama questo metodo tramite reflection, e in questo momento Invoke
(non il metodo stesso, solo la chiamata di reflection) richiede il 70% del tempo totale di esecuzione.
Il metodo è sempre lo stesso, quindi preferirei chiedere a PowerShell di non usare affatto reflection.
Soluzione
Credo che i soli tipi di chiamata di metodo che sono associati anticipatamente in PowerShell, o almeno il più presto possibile in un linguaggio dinamico, sono i seguenti
- Cmdlet.
- Metodi statici
Non sono sicuro del numero 2. Credo che debbano ancora usare la riflessione per arrivare al metodo sottostante.
CmdLets è probabilmente la scelta migliore qui. In tal caso, la chiamata effettiva viene associata anticipatamente, ma i parametri devono comunque essere sottoposti a un processo di conversione. Prova a spostare la tua chiamata del metodo in un CmdLet e ??vedi se questo ti aiuta.