我有一个事件处理程序需要确定一个类型并执行代码,如果它匹配一个特定的类型。最初我们把它转换成一个对象,如果它不是null,我们执行代码,为了加快速度,我使用了反射,实际上它减慢了速度,我不明白为什么。为什么在.NET中投射速度比反射速度快?
这里是一个代码示例
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");
这是跟踪输出我得到
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
这不是很多,但如果我们不得不这样做了很多随着时间的推移它可以增加向上。
随着时间的推移_Everything_可能会加起来。除非你有证据表明这个实际上是随着时间的推移累加的,否则不要强调它。 – 2009-07-02 18:25:43
这是关于最佳实践的更多信息,如果铸造速度更快,那么我应该使用铸造而不是反射 – 2009-07-02 18:47:10