Ho un gestore eventi che deve determinare un tipo ed eseguire codice se corrisponde a un tipo specifico. Inizialmente lo abbiamo lanciato su un oggetto e se non era nullo abbiamo eseguito il codice, per accelerarlo ho usato il reflection e in realtà lo ho rallentato e non capisco perché.Perché la trasmissione è più veloce della riflessione in .NET?
ecco un esempio di codice
Trace.Write("Starting using Reflection");
if (e.Item.GetType() == typeof(GridDataItem))
{
bool isWatch = Convert.ToBoolean(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["IsWatch"]);
if (isWatch)
{
e.Item.Style["Font-Weight"] = "bold";
}
}
Trace.Write("Ending using Reflection");
Trace.Write("Starting using Cast");
GridDataItem gridItem = e.Item as GridDataItem;
if (gridItem !=null)
{
bool isWatch = Convert.ToBoolean(gridItem.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["IsWatch"]);
if (isWatch)
{
gridItem.Style["Font-Weight"] = "bold";
}
}
Trace.Write("Ending using Cast");
e questo è l'output di analisi ottengo
Starting using Reflection 0.79137944962406 0.576538
Ending using Reflection 0.791600842105263 0.000221
Starting using Cast 0.791623353383459 0.000023
Ending using Cast 0.791649308270677 0.000026
Starting using Reflection 0.876253801503759 0.084604
Ending using Reflection 0.87631790075188 0.000064
Starting using Cast 0.87633445112782 0.000017
Ending using Cast 0.87634950075188 0.000015
non è molto, ma se abbiamo dovuto fare questo molto nel corso del tempo si potrebbe aggiungere su.
_ Tutto ciò che potrebbe aggiungere nel tempo. A meno che tu non abbia le prove che questo _actually è-aggiungendo nel tempo, non sottolineo. –
Si tratta di best practice, se il casting è più veloce allora dovrei usare casting invece di reflection –
Questa logica non segue affatto. Se il cast è CORRETTO, dovresti usare il cast invece del riflesso. La correttezza è più importante della velocità. –