这是否更快
var query = from prop in object.GetType().GetProperties()
where prop.Name == "Id"
select prop;
var singleProperty = query.SingleOrDefault();
//do stuff with singleProperty
比这个?
var type = object.GetType();
foreach(var prop in type.GetProperties())
{
if(prop.Name == "Id")
{
//do stuff
}
}
反过来?或者它们是一样的吗? 为什么以及如何知道?
很抱歉在我的问题中过于直接。我更喜欢第一个,但我不知道为什么或是否应该。
感谢。
答案 0 :(得分:4)
从技术上讲,由于中间数据和LINQ抽象,第一种情况可能会分配更多内存并执行更多处理来生成最终结果,而不是第二种情况。但是,在大范围的事物中,时间和内存的数量可以忽略不计,使得您的代码最可靠,而不是最有效的代码。这可能是过早优化的一个例子。
以下是一些参考文献,为什么第一个可能稍慢:
答案 1 :(得分:1)
正确答案是:使用Reflector查看编译器生成的内容。
也就是说,您的LINQ查询使用相同的机制来检索属性列表作为您的其他代码段。它在技术上应该更快,而不涉及linq开销。但是,我希望差异很小(即,不可感知),所以这实际上归结为代码可读性和可维护性决策。
我讨厌LINQ,所以跳过它。 德尔>
回顾,一年后:
我发现LINQ不是我认为的恶魔。我实际上对它的实现印象非常深刻,并花了很多时间看着IL试图找到一个不喜欢它的正当理由。 这就是说:LINQ-to-objects很漂亮。但是,使用数据库处理项目的后代:不要将此作为在客户端上执行所有查询的理由,而不是让数据库服务器执行它非常非常擅长的工作。
答案 2 :(得分:0)
它们在性能方面是相同的,因为LINQ使用deferred execution。但是,LINQ选项中可能存在一些(或不相关的)更大量的内存。
因此,它们在性能和行为方面(有效)相同!
我会选择LINQ版本以提高可读性,因为我喜欢LINQ,但他们都喜欢它们。