相关疑难解决方法(0)

ASP.NET MVC 2 VirtualPathProvider GetFile每次都针对每个请求

我已经实现了VirtualPathProvider.VirtualPathProvider从文件系统中读取视图.

但是我的问题是GetFile(string virtualPath)每次请求都不会执行该方法.我认为这与缓存有关,不是吗?我想要的是每次请求每次获取文件.因为在某些情况下,文件系统中的页面将被修改,用户希望系统立即显示更改.

谢谢.

asp.net-mvc virtualpathprovider asp.net-mvc-2

8
推荐指数
1
解决办法
2702
查看次数

VirtualPathProvider性能

我目前正在尝试创建一个类库并将MVC视图嵌入其中,以便我们可以在多个站点上共享它,如下所述:http://www.wynia.org/wordpress/2008/12/aspnet-mvc-plugins /

性能很重要,所以我想弄清楚这是否可行.如果可能的话,有人可以稍微解释一下VirtualPathProvider吗?

我注意到这个方法只为每个文件调用一次.

public override VirtualFile GetFile(string virtualPath)
{
    if (ResourceFileExists(virtualPath))
         return new EmbeddedVirtualFile(virtualPath);

    return base.GetFile(virtualPath);
}
Run Code Online (Sandbox Code Playgroud)

VirtualPathProvider是否自动缓存文件/视图?在另一篇文章中(解释相同的事情),他们声明你应该覆盖GetCacheDependency:

public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
    if (ResourceFileExists(virtualPath))
        // Return null or otherwise ASP.NET will try to monitor the file.
        // Is actually the default implementation.
        return null;

    return base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}
Run Code Online (Sandbox Code Playgroud)

所以在这里返回null不会影响VirtualFile的"缓存"?我问这个的原因是因为我们创建的VirtualFile的自定义实现,称为EmbeddedVirtualFile,在重写的Open()方法中使用了这段代码:

var assembly = Assembly.LoadFile(assemblyName);
if (assembly != null)
{
    Stream resourceStream = assembly.GetManifestResourceStream(resourceName);
    return resourceStream;
}
Run Code Online (Sandbox Code Playgroud)

我有点害怕这会有性能损失.有人可以安慰我吗?

c# asp.net-mvc virtualpathprovider

5
推荐指数
0
解决办法
1333
查看次数