Cache.Add 与Cache.Insert 的区别

lichxi1002 2009-03-29 12:18:29
不能理解Cache.Add 与Cache.Insert 的区别
求解
...全文
1124 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
virusswb 2010-03-09
  • 打赏
  • 举报
回复
下是从微软网上MSDN找到的一篇有关Cache的说明, 内容差不多,但是要更加具体一些:

您可以使用三种不同的技术将项添加到 Cache 对象中。根据应用程序要求的不同,您的选择可以从简单到复杂。

如果要利用 Cache 所提供的清理、到期时间和依赖项支持,则必须使用 Cache.Insert 方法或 Cache.Add 方法。

注意 Add 和 Insert 方法具有相同的签名,但它们之间存在细微的差别。首先,调用 Add 方法返回表示缓存项的对象,而调用 Insert 方法不是。其次,如果您调用这些方法并将已存储在 Cache 中的某个项添加到 Cache 中,那么它们的行为是不同的。Insert 方法替换该项,而 Add 方法失败。
通过指定其键和值将项添加到缓存中

通过指定项的键和值,您可以像将项添加到字典中一样将其添加到缓存中。下面的代码将文本框的当前 Value 属性添加到 Cache 中。
[Visual Basic]
Cache("txt1") = txtName.value
[C#]
Cache["txt1"] = txtName.value;通过使用 Insert 方法将项添加到缓存中

重载 Insert 方法,允许您定义正在使用的版本的参数的值。例如,若要只添加项的键和值,则使用下面的代码。
[Visual Basic]
Cache.Insert("MyData1", connectionString)
[C#]
Cache.Insert("MyData1", connectionString); 使用 Add 方法将项添加到缓存中

Add 方法与 Insert 方法具有相同的签名,但它返回表示您所添加项的对象。
[Visual Basic]
Cache.Add("MyData1", connectionString)
[C#]
Cache.Add("MyData1", connectionString); 这两种方法都使您能够在很大程度上控制在 Cache 中保留项的条件。两种方法都支持使缓存的项依赖于外部文件或目录、Cache 中的其他键或任意一个的数组。将设有依赖项的项添加到 Cache 中将创建 CacheDependency 类的实例,它跟踪对您定义的依赖项的更改。如果这些依赖项的任何一个发生更改(包括被删除或移动),则将与该依赖项关联的项从 Cache 中移除。

将设有依赖项的项添加到缓存中

您可以使用 Add 或 Insert 方法中的 dependencies 参数将设有依赖项的项添加到 Cache 中。下面的示例演示使用 Insert 方法将设有依赖项(在 XML 文件上)的项添加到 Cache 中。
[C#]
Cache.Insert("MyData1", connectionString, new CacheDependency(Server.MapPath(\\myServer\myConfig.xml)));
[Visual Basic]
Cache.Insert("MyData1", connectionString, new CacheDependency(Server.MapPath(\\myServer\myConfig.xml)))将设有到期策略的项添加到缓存中

您可以使用 absoluteExpiration parameter 参数和 slidingExpiration 参数将设有到期策略的项添加到 Cache 中。您可以定义绝对过期时间或弹性过期时间,但不能同时定义两者。在使用上述参数之一定义到期策略时,必须将另一个参数设置为零。Cache 类定义了两个自动执行该操作的字段:NoAbsoluteExpiration 和 NoSlidingExpiration。当定义绝对或弹性过期时间时,只要将适当的参数设置为其相应的字段值即可。下面的示例使用 Insert 方法将设有两分钟绝对到期时间的项添加到 Cache 中。
[C#]
Cache.Insert("MyData1", connectionString, null, DateTime.Now.AddMinutes(2), NoSlidingExpiration);
[Visual Basic]
Cache.Insert("MyData1", connectionString, null, DateTime.Now.AddMinutes(2), NoSlidingExpiration)下面的代码使用 Insert 方法将设有 30 秒弹性过期时间的项添加到 Cache 中。

[C#]
Cache.Insert("MyData1", connectionString, null, NoAbsoluteExpiration, TimeSpan.FromSeconds(30));
[Visual Basic]
Cache.Insert("MyData1", connectionString, null, NoAbsoluteExpiration, TimeSpan.FromSeconds(30))注意 当设置绝对到期时间时,请使用 DateTime 结构。当设置弹性过期时间时,请使用 TimeSpan 结构。另外,如果您创建的弹性过期时间小于零或大于一年,则将引发 ArgumentOutOfRangeException 类。
您还可以使用 Add 或 Insert 方法通过在 CacheItemPriority 枚举中指定值定义缓存项的相对重要性。当 Web 服务器进行清理以释放内存时,这些相对优先级会对它有所帮助。Web 服务器会在移除具有较高优先级的项之前先从 Cache 中移除具有较低优先级的项。

将设有优先级设置的项添加到缓存中

您可以通过在 Add 或 Insert 方法上使用 priority 参数将设有优先级设置的项添加到 Cache 中。下面的示例使用 Add 方法将 priority 为 High 的项添加到 Cache 中。
[C#]
Cache.Add("MyData1", connectionString, null, NoAbsoluteExpiration, TimeSpan.FromSeconds(30), CacheItemPriority.High, null);
[Visual Basic]
Cache.Add("MyData1", connectionString, null, NoAbsoluteExpiration, TimeSpan.FromSeconds(30), CacheItemPriority.High, null) 这些方法还允许在项从缓存中移除时,使用 CacheItemRemovedCallback 委托通知应用程序。有关完整的示例,请参见从缓存中删除项时通知应用程序。
woodyy 2009-03-29
  • 打赏
  • 举报
回复
我也想知道。是不是后者可以放在cache里的任意位置。

而add只是放在最后一个。一般insert和add都是这么区别的。

我猜的,不一定正确,想求正解。
wuyq11 2009-03-29
  • 打赏
  • 举报
回复
Add:
将指定项添加到 Cache 对象,该对象具有依赖项、过期和优先级策略以及一个委托。如果 Cache 中已保存了具有相同 key 参数的项,则对此方法的调用将失败。若要使用相同的 key 参数改写现有的 Cache 项,请使用 Insert 方法。
Insert:
向 Cache 对象插入项。使用此方法的某一版本改写具有相同 key 参数的现有 Cache 项
szldk 2009-03-29
  • 打赏
  • 举报
回复
MARK
vrhero 2009-03-29
  • 打赏
  • 举报
回复
如果Cache中已保存了具有相同key参数的项...Cache.Insert方法将覆盖现有Cache项,而对Cache.Add方法的调用将失败...

如此简单的问题为什么不花几分钟去看一眼MSDN...

62,269

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧