【发布时间】:2009-07-02 17:09:00
【问题描述】:
我有一个事件处理程序,它需要确定类型并在匹配特定类型时执行代码。最初我们将它转换为一个对象,如果它不为空,我们执行代码,为了加快它的速度,我使用了反射,它实际上减慢了它的速度,我不明白为什么。
这是一个代码示例
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
这不是很多,但如果我们不得不随着时间的推移经常这样做,它可能会加起来。
【问题讨论】:
-
一切都会随着时间的推移而累积。除非您有证据表明这实际上是随着时间的推移而增加的,否则不要为此感到压力。
-
更多的是关于最佳实践,如果投射更快,那么我应该使用投射而不是反射
-
完全不符合这个逻辑。如果投射是正确的,那么你应该使用投射而不是反射。正确性比速度更重要。
-
@Eric 在这种情况下,速度是决定因素,从普遍共识来看,使用强制转换是最佳实践,我的问题更多是关于在这种情况下强制转换更快,总是如此,什么是被认为是最佳实践
标签: c# .net reflection casting