【问题标题】:Suitable method to implement caching in asp.net在asp.net中实现缓存的合适方法
【发布时间】:2012-05-22 02:51:24
【问题描述】:

我需要在 Asp.net Web 应用程序中实现缓存 我需要存储具有不同 ID 的数据。 那么哪种方法更好呢?

  1. 使用字典变量。插入数据(键为ID,数据为值)。

        Dim mDict As New Dictionary(Of String, String)
        mDict .Add(bID, uwtTree.WriteXmlString(True, True))
        Cache.Insert("mTree", mDict) 
    

    将其添加到缓存变量中。 访问缓存变量

         If Not Cache("mTree") is Nothing Then 
            'cast to dictionary and check ID exists , if exsitis get the data
         End iF
    
  2. 为不同的 ID 使用缓存变量

         Cache.Insert(ID,data)
          ' each insertion for each ID
         If Not Cache(ID) is Nothing Then 
            ' get the data. '
         End IF
    

哪种方法是最好的方法?或者还有其他方法存在吗? 我正在使用 .Net 3.5 /IIS 7 (VB.Net)。提前致谢

提高性能和内存优化的方法

【问题讨论】:

  • 什么更好?表现?内存消耗?可读性?便于使用?本地化?还有什么?
  • @Oded 性能和内存。
  • 测试这两种方法 - 使用性能和内存分析器找出哪一种更适合您的用例。
  • @Oded k.我现在正在做。正是专家的建议。

标签: asp.net .net vb.net caching


【解决方案1】:

没有上下文就不可能说哪个“更好”。

但是,如果您将字典放入缓存中(选项 1),最好确保它是线程安全的字典(例如 .NET 4 ConcurrentDictionary)。

这两种方法最明显的区别是,使用选项 1,缓存项过期将导致字典中的所有项都被立即删除。使用选项 2,单个项目将独立过期。

回应评论:

我有 xml 数据,我将作为字符串存储在缓存(数据缓存)中。如果我将它存储为 XmlObject 有什么区别吗?

我看到的主要区别是:

  • String 是不可变的,因此您在访问它时无需担心线程安全。 XML 对象不是不可变的 - 因此您需要确保不修改从缓存中检索到的对象(或使用锁来确保任何此类修改都是线程安全的)。

  • 如果您存储一个字符串,您可能会在每次从缓存中检索它时将其解析为一个 XML 对象,这将导致潜在的性能损失。

【讨论】:

  • 我有 xml 数据,我将作为字符串存储在缓存(数据缓存)中。如果我将它存储为 XmlObject 有什么区别吗?
  • 感谢您的回复。实际上,我正在使用 Infragistics 控件,并且正在尝试使用 xml 字符串创建树。不需要将字符串值转换为xml。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 2021-07-16
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
相关资源
最近更新 更多