【发布时间】:2011-09-21 02:32:08
【问题描述】:
我有一个简单的ASP.NET MVC 控制器。在几个操作方法中,我访问了一个资源,我会说很昂贵。
所以我想,为什么不让它成为静态的。因此,我认为我可以在 .NET 4.0 中利用 Lazy<T> 的使用,而不是使用 double checked locking。调用昂贵的服务一次而不是多次。
所以,如果这是我的伪代码,我该如何更改它使用Lazy<T>。
对于这个悔恨的例子,我将使用File System 作为昂贵的 资源
因此,在这个示例中,每次请求调用该 ActionMethod 时,我都希望使用 Lazy 来保存该文件列表,而不是从目标路径获取所有文件。当然,这只是第一次调用。
下一个假设:如果内容发生更改,请不要担心。这里超出了范围。
public class FooController : Controller
{
private readonly IFoo _foo;
public FooController(IFoo foo)
{
_foo = foo;
}
public ActionResult PewPew()
{
// Grab all the files in a folder.
// nb. _foo.PathToFiles = "/Content/Images/Harro"
var files = Directory.GetFiles(Server.MapPath(_foo.PathToFiles));
// Note: No, I wouldn't return all the files but a concerete view model
// with only the data from a File object, I require.
return View(files);
}
}
【问题讨论】:
-
使用 ASP.NET 缓存有什么问题?
-
听起来您正在寻找单例,而不是对象的惰性实例化。当然,您可以使用
Lazy来创建单例...
标签: c# .net asp.net asp.net-mvc-3 lazy-loading