繁体   English   中英

c#上的缓存函数结果

[英]Caching function result on c#

让我们有这样的代码:

 Function<int,int> someFunc=(x)=>{
 //SomeCalc
 return y;
 }

我希望以这种方式使用我的功能:

 int result;
 if(someFunc(k)!=0)
 {
 result=someFunc(k);
 }

问题是编译器是否缓存了函数结果,因此只计算一次? 或者它将被计算两次? 试图谷歌答案,但没有运气。

那么关闭缓存呢?

该功能将执行两次。 编译器/运行时无法知道函数的结果是否第二次相同。 如果这是函数所需的功能,则需要自己缓存该值。

在这种情况下,虽然您最好只将函数的结果存储为变量,以便您可以验证它然后使用它,而不是让函数缓存它生成的所有结果。

lambda,闭包等的使用不会改变上述任何陈述。

C#编译器不会在此处缓存结果。 我也不希望JIT一般。 当然,只需使用局部变量,您就可以非常轻松地在本地进行。 您还可以编写一个小的memoization方法来应用于闭包本身,以便结果更全局地缓存 - 但是您需要注意如何使用它。

C#编译器可以在某些情况下缓存lambda表达式本身,但它是一个实现细节。 特别是,我相信任何不捕获任何变量(包括this )的lambda表达式都由Microsoft实现缓存。

结果未缓存。 每次调用代理时都会执行计算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM