C# 内置lambda表达式性能

C# 内置lambda表达式性能,c#,lambda,C#,Lambda,我想在lambda expression中加入角色 哪一个更快   var callObject = CallObjectHolder.Instance.Get(x => x.Log.Id.ToString() ==  ev.src_unique_id); 或 最快的方法是在比较循环之前将字符串转换为double一次。这取决于表达式的情况 如果要对数据库进行调用,以便将表达式转换为SQL,那么第二个方法将更快,因为它只执行一次转换,而不是转换表中的每个值 如果您正在查询内存中的数据,那么

我想在lambda expression中加入角色 哪一个更快

  var callObject = CallObjectHolder.Instance.Get(x => x.Log.Id.ToString() ==  ev.src_unique_id);


最快的方法是在比较循环之前将字符串转换为double
一次。

这取决于表达式的情况

如果要对数据库进行调用,以便将表达式转换为SQL,那么第二个方法将更快,因为它只执行一次转换,而不是转换表中的每个值

如果您正在查询内存中的数据,那么它们的执行情况大致相同


但让我有点担心的是,它看起来像是在使用浮点数作为标识符,这会在某些点上给您带来精度问题。浮点数不是用来精确表示所有数字的,通常应该避免比较浮点数是否相等。

只想在这里加上我的2美分。当值类型被装箱时,必须在将值类型转换为引用类型时分配和构造新对象。String是一种引用类型,您正在将值类型转换为引用类型,因此涉及装箱成本。取消装箱的成本稍低一些,因为您的对象已经分配了内存,您只需从堆中获取值并将其放入值类型的堆栈中


Rest@Guffa已经澄清了比较运算符的选择和成本。

是什么让你认为存在循环?这是一个lambda表达式,它的目的是在每个对象x上执行,直到找到一个符合表达式的对象。如果没有某种循环,这会变得非常困难。至少每x执行一次,即使是手动展开;pI可能会补充说,第一个方法取消了任何数据库索引的使用。我希望我能分别投票表决你答案的两部分!将数字转换为字符串时,会创建一个对象,但这不是因为装箱。对象是转换结果的字符串。代码是双向编写的。如果您想知道哪一个更快,请同时运行它们,然后您就知道了。如果你有两匹马,想知道哪匹马跑得更快,你会在网上给陌生人看这些马的照片,让他们猜,还是和他们比赛?
   var callObject = CallObjectHolder.Instance.Get(x => x.Log.Id == System.Convert.ToDouble(ev.src_unique_id)
);