c# - 具有缓存结果的属性或 get 方法
问题描述
我有一个需要大约 200 毫秒才能运行的方法,因此希望缓存结果。这个结果会被频繁使用,但它永远不会改变。
我不完全确定最好的解决方案是什么,我应该把它放到属性还是 get 方法中?
举个例子:
1
private string _result;
public string Result => _result ?? (_result = GetSlowResult());
2
private string _result;
public string GetResult() => _result ?? (_result = GetSlowResult());
就个人而言,我通常希望从一个属性“现在”而不是“以后”可用,但是使用 Get 方法我希望结果总是检索一个新的 GetSlowResult
而不是使用缓存的值。我可以将方法名称更改为,GetCachedResult
但我也没有出售它,因为看起来你需要先调用一个GetResult
方法。
对此有什么指导方针吗?你喜欢哪个?
解决方案
我建议您使用该Lazy<T>
课程。它使您传递一个讨论如何创建该对象的工厂,之后,它仅在您第一次请求时创建,然后使用相同的引用(缓存值)。
下面是它的外观:
Lazy<T> Result = new Lazy<T>(GetSlowResult); //T is your type
然后,要使用结果,只需获取她的属性Value
:
T myResult = Result.Value;
您可以在官方 dotnet 文档中查看有关此内容的更多信息。
推荐阅读
- javascript - 在没有 setTimeout 的情况下删除和添加类时不会出现 Css 动画
- android - 调用需要 API 级别 29(当前最低为 21):`android.widget.NumberPicker#setTextColor`
- python - python - 如何在python中使用pdfkit.from_url完全加载页面之前停止响应
- javascript - JavaScript 中函数类的默认处理程序
- asp.net - 将角色声明更改为登录用户
- mysql - 如何通过多个子表条件查询得到主表和子表数据列表?
- firebase - Flutter Google SignIn 未显示
- apache-kafka - 代理不可用后自动重启 Quarkus 微服务
- javascript - 如何为 React.js 中动态生成的页面生成站点地图
- c - 为什么在这个程序中 return n 是可选的?