首页 > 解决方案 > 具有缓存结果的属性或 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方法。

对此有什么指导方针吗?你喜欢哪个?

标签: c#algorithmdesign-patterns

解决方案


我建议您使用该Lazy<T>课程。它使您传递一个讨论如何创建该对象的工厂,之后,它仅在您第一次请求时创建,然后使用相同的引用(缓存值)。

下面是它的外观:

Lazy<T> Result = new Lazy<T>(GetSlowResult); //T is your type

然后,要使用结果,只需获取她的属性Value

T myResult = Result.Value;

您可以在官方 dotnet 文档中查看有关此内容的更多信息。


推荐阅读