技术开发 频道

ASP.NET4与VS2010 Web开发页面服务改进

  对于您不希望检查的传入的HTTP数据的情况,请求验证类可以退让给ASP.NET的默认请求验证部分—这是通过简单地调用base.IsValidRequestString实现的。

  八、对象缓存和对象缓存扩展

  自第一个版本发行以来,ASP.NET提供了一个功能强大的内存对象缓存(System.Web.Caching.Cache)。缓存应用非常受欢迎,即使在非Web应用程序中也被广泛应用。但是,仅为了能够使用ASP.NET对象缓存而在一个Windows窗体或WPF应用程序中包括对于System.Web.dll程序集的引用这真是一件令人尴尬的事情。

  为了使所有应用程序都能够利用缓存,.NET Framework 4引入了一个新的程序集,一个新的命名空间,一些基本类型和一个具体的缓存实现。新程序集System.Runtime.Caching.dll中在System.Runtime.Caching命名空间中包含了一个新的缓存API。该命名空间包含了两个核心的类集:

  ? 为定制缓存实现提供了一些具备基本功能的抽象类型。

  ? 提供了一个具体的内存对象缓存实现(即System.Runtime.Caching.MemoryCache类)。

  新的MemoryCache类的建模方式极类似于ASP.NET缓存,其中使用了相当部分的ASP.NET中的内部缓引擎逻辑。虽然已经更新System.Runtime.Caching中的公共缓存API以支持开发自定义缓存,但是如果您使用ASP.NET Cache对象的话,那么你在使用新的API过程中会发现许多熟悉的概念。

  要深入讨论新的MemoryCache类和相应的基本支持API,你需要参考其他更完整的文档。但是,下面的例子让你对新的缓存API的使用方式有一个大致的了解。注意,这个例子是一个Windows窗体应用程序的一部分,其中并没有依赖于System.Web.dll程序集。

private void btnGet_Click(object sender, EventArgs e)
{
  
//Obtain a reference to the default MemoryCache instance.
  
//Note that you can create multiple MemoryCache(s) inside
  
//of a single application.
  ObjectCache cache
= MemoryCache.Default;
  
//In this example the cache is storing the contents of a file string
  fileContents
= cache["filecontents"] as string;
  
//If the file contents are not currently in the cache, then
  
//the contents are read from disk and placed in the cache.
  
if (fileContents == null)
  {
    
//A CacheItemPolicy object holds all the pieces of cache
    
//dependency and cache expiration metadata related to a single
    
//cache entry.
    CacheItemPolicy policy
= new CacheItemPolicy();
    
//Build up the information necessary to create a file dependency.
    
//In this case we just need the file path of the file on disk.
    List
<string> filePaths = new List<string>();
    filePaths.Add(
"c:\\data.txt");
    
//In the new cache API, dependencies are called "change monitors".
    
//For this example we want the cache entry to be automatically expired
    
//if the contents on disk change. A HostFileChangeMonitor provides
    
//this functionality.
    policy.ChangeMonitors.Add(
new HostFileChangeMonitor(filePaths));
    
//Fetch the file's contents
    fileContents = File.ReadAllText("c:\\data.txt");
    
//And then store the file's contents in the cache
    cache.Set("filecontents", fileContents, policy);
  }
  MessageBox.Show(fileContents);
}
0
相关文章