Uso della reflection, performance scadenti.. si ma quando?
dops
dops non è online. Ultima attività: 15/06/2009 18.29.48dops
il 24 luglio 2008 alle 23.54
916 messaggi dal 29 aprile 2002
Mi chiedevo, se una chiamata ad un metodo, la creazione di una istanza di classe, o una qualsiasi operazione su un tipo di un assembly caricato con reflection è comunque + lenta rispetto ad una stessa operazione senza reflection.
Insomma ho un dubbio: una volta caricato l'assembly.. i tipi e tutto il resto in esso contenuto non stanno in memoria? o meglio nell'istanza del tipo Assembly (e quindi in memoria) ? e quindi la chiamata ad un loro metodo o ad una proprietà ha le stesse performance di una chiamata naturale?

non sò se mi sono spiegato :D

Microsoft Most Valuable Professional
Re: Uso della reflection, performance scadenti.. si ma quando?
SM15455
SM15455 non è online. Ultima attività: 02/07/2009 15.17.16SM15455 Top Poster
il 25 luglio 2008 alle 09.04
Contributi | Blog | 2.787 messaggi dal 06 settembre 2002

Nothing can be born from hartred

Stefano (SM15455) Mostarda
http://blogs.aspitalia.com/SM15455
Rome Italy
Re: Uso della reflection, performance scadenti.. si ma quando?
dops
dops non è online. Ultima attività: 15/06/2009 18.29.48dops
il 25 luglio 2008 alle 13.33
916 messaggi dal 29 aprile 2002
sm15455 ha scritto:
Ciao,

Semplicemente è più lenta SEMPRE.

esistono comuque delle tecniche per mitigare la lentezza.

http://blogs.aspitalia.com/ricciolo/post2332/Reflection-Migliorare-Performance.aspx http://blogs.aspitalia.com/ricciolo/post2335/LINQ-Reflection.aspx http://blogs.aspitalia.com/ricciolo/post2336/LINQ-Reflection-Parte.aspx
HTH

grazie, stavo pensando anche alla cache, cioè a mettere in cache un assembly, se si può ovviamente.. mah..

Re: Uso della reflection, performance scadenti.. si ma quando?
imperugo
imperugo non è online. Ultima attività: 03/07/2009 11.13.15imperugo Top Poster
il 25 luglio 2008 alle 13.58
>stavo pensando anche alla cache, cioè a mettere in cache un assembly

Questa mi mancava!

imperugo
myblog : http://imperugo.tostring.it
Microsoft Employee
RE: Uso della reflection, performance scadenti.. si ma quando?
AlessC-MSFT
AlessC-MSFT non è online. Ultima attività: 04/02/2009 9.09.42AlessC-MSFT
il 25 luglio 2008 alle 16.19
Contributi | Blog | 175 messaggi dal 04 giugno 2007
Vorrei essere sicuro di capire la tua domanda, perche' stai mescolando due concetti diversi ma correlati.

Da un lato, tramite reflection, puoi dinamicamente esplorare e scoprire un tipo. Ovviamente, questo tipo di accesso ai dati e' sempre piu' lento dell'accesso nativo in quanto richiede l'esplorazione di strutture dati del runtime per accedere alle caratteristiche del tipo.
Tutte queste funzionalita' sono esposte nel namespace System.Reflection

Dall'altro lato, tramite Reflection.Emit, puoi generare dinamicamente un assembly e caricarlo. In questo caso, se una volta caricato accedi all'assembly senza passare tramite reflection, il fatto che l'assembly sia stato generato dinamicamente da te diventa irrilevante.

C'e' anche un terzo caso, in cui invece di generare e caricare un intero assembly in memoria passando dal file system (e quindi avendo il problema di non poterlo scaricare senza scaricare tutto l'appdomain) puoi generare metodi (ma non tipi) sul garbage collection heap tramite la Lightweight Code Generation. Le RegEx di .NET sono implementate con questa tecnica.

Saluti

--Alessandro
Re: Uso della reflection, performance scadenti.. si ma quando?
dops
dops non è online. Ultima attività: 15/06/2009 18.29.48dops
il 25 luglio 2008 alle 20.08
916 messaggi dal 29 aprile 2002
imperugo ha scritto:
>stavo pensando anche alla cache, cioè a mettere in cache un assembly

Questa mi mancava!

ti è nuova la gac?

RE: Uso della reflection, performance scadenti.. si ma quando?
dops
dops non è online. Ultima attività: 15/06/2009 18.29.48dops
il 25 luglio 2008 alle 20.10
916 messaggi dal 29 aprile 2002
AlessC-MSFT ha scritto:
C'e' anche un terzo caso, in cui invece di generare e caricare un intero assembly in memoria passando dal file system (e quindi avendo il problema di non poterlo scaricare senza scaricare tutto l'appdomain) puoi generare metodi (ma non tipi) sul garbage collection heap tramite la Lightweight Code Generation. Le RegEx di .NET sono implementate con questa tecnica.

Saluti

--Alessandro

interessante grazie ;)

Re: Uso della reflection, performance scadenti.. si ma quando?
imperugo
imperugo non è online. Ultima attività: 03/07/2009 11.13.15imperugo Top Poster
il 26 luglio 2008 alle 00.33
>ti è nuova la gac?

Assolutamente no, ma non credo che mettendo un'assembly in GAC hai un aumento di performance.
Il vantaggio che sicuramente puoi trarre dall'aggiungere un'assembly in GAC, oltre al fatto di averla condivisa a livello di macchina, sta nella verifica dell'hash dello strong name che, nel caso sia in gac, viene verificato nel momento dell'installazione, e non ad ogni avvio come spiegato qui da Claudio Caldato (che Alessandro sicuramente conosce bene):

http://msdn.microsoft.com/en-us/magazine/cc163655.aspx

Ciauz

imperugo
myblog : http://imperugo.tostring.it

2 pagine: [1] 2 Avanti >>

Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.

COMMUNITY
ULTIMI MESSAGGI
MEDIA
IN EVIDENZA
MISC
Powered by .db Forums "Caesar Reborn" v. 2009.6.9