使用lambda重新定义函数或调用标准API(Math.Ceiling)

Hug*_*ugo 2 c# lambda casting

我想计算严格正整数的上限除法.我可以选择以下两种实现:

var ceil = new Func<int, int, int>((a, b) => a % b > 0 ? a / b + 1 : a / b);
var x = ceil(y, z); // y and z being int previously defined
Run Code Online (Sandbox Code Playgroud)

var x = (int)Math.Ceiling((double)y / (double)z);
Run Code Online (Sandbox Code Playgroud)

第二个版本(Math.Ceiling)似乎与第一个版本(带有lambda)相同,但添加了3个转换.所以我觉得要使用第一个.我错过了什么吗?

(编辑以确定它只是处理严格正整数的事实)

Jam*_*are 6

就个人而言,我会避免担心优化int- > double转换,这些通常是您对性能的担忧.是的,他们可以加起来,但你需要在紧密循环或类似的东西中做很多事情.

我坚持使用,Math.Ceiling()因为你要做的事情非常明显,因此更容易维护.如果您发现代码很慢,那么首先优化并攻击最大的问题点.

这些超过10亿次迭代的时间,λ为8,677 ms,为Math.Ceiling()9,749 ms,但是每次调用为0.0000087 ms vs 0.0000097 ms,这可以忽略不计.