• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

演练:在 ASP.NET 中缓存应用程序数据

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
.NET Framework 4
 
评价此主题
 

 

此外,缓存还使数据在数据源临时不可用时可用。

System.Runtime.Caching 命名空间中定义的。

注意

此命名空间使缓存对所有的 .NET Framework 应用程序可用。

在本演练中,您将缓存文本文件的内容。

本演练演示以下任务:

  • 创建 ASP.NET 网站。

  • 添加对 .NET Framework 4 的引用。

  • 添加缓存文件内容的缓存项。

  • 为缓存项提供逐出策略。

  • 监视缓存文件的路径,并向缓存通知被监视项的更改情况。

若要完成本演练,您需要:

  • Microsoft Visual Studio 2010。

  • 您将在网页中显示此文本文件的内容。

首先将创建一个 ASP.NET 网站。

 警告

Web 应用程序项目与网站项目

创建 ASP.NET 网站

  1. 启动 Visual Studio 2010。

  2. “网站”。)

    “新建网站”对话框。

  3. “ASP.NET 网站”

  4. “确定”

    “源”视图中显示该页,您可以在此视图中查看该页的 HTML 元素。

下一步是将要使用的文本文件添加到当前网站项目。

向项目中添加文本文件

  1. “添加现有项”

  2. “添加”

System.Runtime.Caching 命名空间,则必须添加对该命名空间的引用。

添加对网站的引用

  1. “添加引用”

  2. “确定”

Label 控件中。

将控件添加到页

  1. 打开或切换到 Default.aspx 页。

  2. Button 控件拖到 Default.aspx 页上。

  3. 接受默认 ID 属性。

  4. 接受默认 ID 属性。

接下来,您将添加代码来执行以下任务:

  • 创建一个缓存类实例,即,您将实例化缓存对象。

  • HostFileChangeMonitor 对象来监视文本文件中的更改。

  • 读取文本文件并将其内容缓存为缓存项。

  • 显示缓存文本文件的内容。

创建缓存对象

  1. 双击按钮将在 Default.aspx.cs 或 Default.aspx.vb 文件中创建一个事件处理程序。

  2. using (C#) 语句。

    [Visual Basic]

     
     
    Imports System.Runtime.Caching
    Imports System.IO
    

     

    [C#]

     
     
    using System.Runtime.Caching;
    using System.IO;
    
  3. 在事件处理程序中,添加以下代码以实例化缓存。

    [Visual Basic]

     
     
    Dim cache As ObjectCache = MemoryCache.Default
    

     

    [C#]

     
     
    ObjectCache cache = MemoryCache.Default;
    

    ObjectCache 是一个基类,提供用于实现在内存中缓存对象的方法。

    注意

    ObjectCache 类来实现缓存。

  4. filecontents 的缓存项的内容。

    [Visual Basic]

     
     
    Dim fileContents As String = TryCast(cache("filecontents"), String)
    

     

    [C#]

     
     
    string fileContents = cache["filecontents"] as string;
    
  5. filecontents 的缓存项。

    [Visual Basic]

     
     
    If fileContents Is Nothing Then
    
    End If
    

     

    [C#]

     
     
    if (fileContents == null)
    {
    
    }
    

    如果指定的缓存项不存在,则您必须读取该文本文件并将其作为一个缓存项添加到缓存。

  6. CacheItemPolicy 对象,该对象指定缓存将在 10 秒后过期。

    [Visual Basic]

     
     
    Dim policy As New CacheItemPolicy()
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0)
    

     

    [C#]

     
     
    CacheItemPolicy policy = new CacheItemPolicy();
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0);
    

    在本演练中,使用的绝对过期时间为 10 秒钟。

  7. if/then 块内部,在上一步中所添加的代码后面,添加以下代码,以便为要监视的文件路径创建一个集合,并向该集合中添加文本文件的路径。

    [Visual Basic]

     
     
    Dim filePaths As New List(Of String)()
    Dim cachedFilePath As String = Server.MapPath("~") & _
            "\cacheText.txt"
    filePaths.Add(cachedFilePath)
    

     

    [C#]

     
     
    List<string> filePaths = new List<string>();
    string cachedFilePath = Server.MapPath("~") + "\\cacheText.txt";
    filePaths.Add(cachedFilePath);
    

    HttpServerUtilityMapPath() 方法将返回指向当前网站的根的路径。

  8. HostFileChangeMonitor 对象添加到缓存项的更改监视集合。

    [Visual Basic]

     
     
    policy.ChangeMonitors.Add(New HostFileChangeMonitor(filePaths))
    

     

    [C#]

     
     
    policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));
    

在此示例中,如果文件的内容发生更改,则缓存项将自动过期。

  1. 在上一步中所添加的代码后面,添加以下代码,以读取文本文件的内容。

     
    fileContents = File.ReadAllText(cachedFilePath) & vbCrLf & DateTime.Now.ToString()
    

     

     
    fileContents = File.ReadAllText(cachedFilePath) + "\n" + DateTime.Now; 
    

    添加日期和时间戳,以帮助您确定缓存项何时过期。

  2. CacheItem 实例插入到缓存对象。

    [Visual Basic]

     
     
    cache.Set("filecontents", fileContents, policy)
    

     

    [C#]

     
     
    cache.Set("filecontents", fileContents, policy);
    

    Set 方法,指定有关应如何逐出缓存项的信息。

  3. Label 控件中显示缓存的文件内容。

    [Visual Basic]

     
     
    Label1.Text = fileContents
    

     

    [C#]

     
     
    Label1.Text = fileContents;
    

您现在可以测试应用程序。

在 ASP.NET 网站中测试缓存

  1. 按 Ctrl+F5 以运行应用程序。

  2. “Get From Cache”

    注意文件末尾的时间戳。

  3. “Get From Cache”

    这将指示显示缓存的内容。

  4. “Get From Cache”

    这指示策略让缓存在 10 秒后过期,并显示新缓存的内容。

  5. 不要进行任何更改。

  6. “Get From Cache”

    再次注意时间戳。

  7. 对文本文件进行更改,然后保存文件。

  8. “Get From Cache”

    这指示主机文件更改监视器在您做出更改时立即逐出了缓存项。

     注意

    您可将逐出时间提高到 20 秒或更长,以允许您在文件中进行更长时间的更改。

完成本演练后,您创建的网站的代码将与下面的示例类似。

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.Caching;
using System.IO;

public partial class _Default : System.Web.UI.Page
{


    protected void Button1_Click1(object sender, EventArgs e)
    {
        ObjectCache cache = MemoryCache.Default;
        string fileContents = cache["filecontents"] as string;

        if (fileContents == null)
        {
            CacheItemPolicy policy = new CacheItemPolicy();
            policy.AbsoluteExpiration =
                DateTimeOffset.Now.AddSeconds(10.0);

            List<string> filePaths = new List<string>();
            string cachedFilePath = Server.MapPath("~") +
                "\\cacheText.txt";

            filePaths.Add(cachedFilePath);

            policy.ChangeMonitors.Add(new
                HostFileChangeMonitor(filePaths));

            // Fetch the file contents.
            fileContents = File.ReadAllText(cachedFilePath) + "\n"
                + DateTime.Now.ToString();

            cache.Set("filecontents", fileContents, policy);

        }

        Label1.Text = fileContents;
    }
}

 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap