ASP.NET缓存数据技巧三则

  • ASP.NET使用缓存机制,将需要大量服务器资源来创建的对象存储在内存中。本文介绍在编写ASP.NET应用时可能会用到的三个ASP.NET缓存数据技巧。
  •  

    ASP.NET缓存数据技巧:访问缓存的值

    由于缓存中所存储的信息为易失信息,即该信息可能由 ASP.NET 移除,因此建议先确定该项是否在缓存中。如果不在,则应将它重新添加到缓存中,然后检索该项。

       
       
    1. string cachedString;  
    2. if (Cache["CacheItem"] != null)  
    3. {  
    4.     cachedString = (string)Cache["CacheItem"];  
    5. }  
    6. else 
    7. {  
    8.  
    9.      //缓存不存在时  
    10.     Cache.Insert("CacheItem""Hello, World.")  
    11.     cachedString = (string)Cache["CacheItem"];  
    12. }  

    ASP.NET缓存数据技巧:删除缓存项

    由于以下任一原因,缓存中的数据可能会自动移除:缓存已满、该项已过期、依赖项发生更改。注意:如果调用 Insert 方法,并向缓存中添加与现有项同名的项,则将从缓存中删除该旧项。显示删除缓存的值:

       
       
    1. Cache.Remove("MyCacheKey"); 

    ASP.NET缓存数据技巧:删除缓存项时通知应用程序

    从缓存中移除项时通知应用程序,可能非常有用。例如,可能具有一个缓存的报告,创建该报告需花费大量的时间进行处理。当该报告从缓存中移除时,希望重新生成该报告,并立即将其置于缓存中,以便下次请求该报告时,用户不必等待对此报告进行处理。

    ASP.NET 提供了CacheItemRemovedCallback 委托,在从缓存中移除项时能够发出通知。还提供 CacheItemRemovedReason 枚举,用于指定移除缓存项的原因。举例:假设有一个 ReportManager 对象,该对象具有两种方法,即 GetReport 和 CacheReport。GetReport 报告方法检查缓存以查看报告是否已缓存;如果没有,该方法将重新生成报告并将其缓存。CacheReport 方法具有与 CacheItemRemovedCallback 委托相同的函数签名;从缓存中移除报告时,ASP.NET 会调用 CacheReport 方法,然后将报告重新添加到缓存中。

    1)创建一个 ASP.NET 网页,该网页将调用类中用于将项添加到缓存中的方法。

       
       
    1. protected void Page_Load(object sender, EventArgs e)  
    2. {  
    3.     this.Label1.Text = ReportManager.GetReport();  

    2)创建用于在从缓存中删除项时处理通知的完整类ReportManager。

       
       
    1. using System;  
    2. using System.Web;  
    3. using System.Web.Caching;  
    4. public static class ReportManager  
    5. {  
    6.     private static bool _reportRemovedFromCache = false;  
    7.       
    8.     static ReportManager() { }  
    9.       
    10.     //从缓存中获取项  
    11.     public static String GetReport()  
    12.     {  
    13.         lock (typeof(ReportManager))  
    14.         {  
    15.             if (HttpContext.Current.Cache["MyReport"] != null)  
    16.             {    //存在MyReport缓存项,返回缓存值  
    17.                 return (string)HttpRuntime.Cache["MyReport"];  
    18.             }  
    19.             else 
    20.             {   //MyReport缓存项不存在,则创建MyReport缓存项  
    21.                 CacheReport();  
    22.                 return (string)HttpRuntime.Cache["MyReport"];  
    23.             }  
    24.         }  
    25.     }  
    26.  
    27.     //将项以 MyReport 的名称添加到缓存中,并将该项设置为在添加到缓存中后一分钟过期。  
    28.     //并且该方法注册 ReportRemoveCallback 方法,以便在从缓存中删除项时进行调用。  
    29.     public static void CacheReport()  
    30.     {  
    31.         lock (typeof(ReportManager))  
    32.         {  
    33.             HttpContext.Current.Cache.Add("MyReport",  
    34.                 CreateReport(), null, DateTime.MaxValue,  
    35.                 new TimeSpan(0, 1, 0),   
    36.                 System.Web.Caching.CacheItemPriority.Default,  
    37.                 ReportRemovedCallback);  
    38.         }  
    39.     }  
    40.  
    41.     //创建报告,该报告时MyReport缓存项的值  
    42.     private static string CreateReport()  
    43.     {  
    44.         System.Text.StringBuilder myReport =   
    45.             new System.Text.StringBuilder();  
    46.         myReport.Append("Sales Report< br />");  
    47.         myReport.Append("2005 Q2 Figures< br />");  
    48.         myReport.Append("Sales NE Region - $2 million< br />");  
    49.         myReport.Append("Sales NW Region - $4.5 million< br />");  
    50.         myReport.Append("Report Generated: " + DateTime.Now.ToString()   
    51.             + "< br />");  
    52.         myReport.Append("Report Removed From Cache: " +   
    53.             _reportRemovedFromCache.ToString());  
    54.         return myReport.ToString();  
    55.     }  
    56.  
    57.     //当从缓存中删除项时调用该方法。  
    58.     public static void ReportRemovedCallback(String key, object value,   
    59.         CacheItemRemovedReason removedReason)  
    60.     {  
    61.         _reportRemovedFromCache = true;  
    62.         CacheReport();  
    63.     }  
    64. }  

    不应在 ASP.NET 页中实现回调处理程序,因为在从缓存中删除项之前该页可能已被释放,因此用于处理回调的方法将不可用,应该在非ASP.NET的程序集中实现回调处理程序。为了确保从缓存中删除项时处理回调的方法仍然存在,请使用该方法的静态类。但是,静态类的缺点是需要保证所有静态方法都是线程安全的,所以使用lock关键字。

    本文来自菩提屋:《缓存应用程序数据(二)》

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值