看到很多人用Hashtable做缓存,Hashtable容器能保存数据到进程结束后?

demoooo 2010-05-02 11:41:39
如题

就是说当前请求结束后, Hashtabel容器add的key和value还能被保留? 能保留多久,进程结束? 还是直至Clear()或服务器重置?

谢谢

...全文
384 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
despird 2010-05-03
  • 打赏
  • 举报
回复
如果你的Hashtable对象不是static的,a页面和b页面创建的是不同的对象。如果对象不是静态的,即使都是a页面创建的,每次请求访问a页面hashtable对象内容也不会保存的,除非你用session保存hashtable对象。还是那句话,hashtable只是类型,能否保存数据取决于你把对象保存在什么位置,和如何访问。
对于你这个问题,你如果想使用Hashtable缓存数据,一个途径是把hashtable创建的对象保存在Cache里面,hashtable本身不能代替Cache。
demoooo 2010-05-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 despird 的回复:]
Cache是对象,由应用程序定义,生存期与应用程序相关;Hashtable仅仅是类型而已,生存期取决于对象定义的位置。
[/Quote]

Hashtable在B层创建, web层a.aspx 引用B层初始化类并创建了Hashtable, 那么此时的web层b.aspx访问B层的这个Hashtable是null吗.
despird 2010-05-03
  • 打赏
  • 举报
回复
Cache是对象,由应用程序定义,生存期与应用程序相关;Hashtable仅仅是类型而已,生存期取决于对象定义的位置。
wuyq11 2010-05-03
  • 打赏
  • 举报
回复
看看petshop
hashtable是变量,Cache是当前应用程序的缓存
HttpContext.Current.Cache.Insert( "MyCacheKey ", MyHashTable);
Hashtable MyHashTable =HttpContext.Current.Cache[ "MyCacheKey "] as Hashtable;
if(MyHashTable !=null){
}
缓存根据cache
wuyq11 2010-05-03
  • 打赏
  • 举报
回复
<%= Html.RenderTemplate(ViewData.Model, "~/a.ascx") %>
threenewbee 2010-05-03
  • 打赏
  • 举报
回复
这个牵涉到变量的生存周期。

首先,服务器重置之后肯定内存里面的一切都没了。

其次,要理解ASP.NET的session会话实现机制。放入session里面的变量在会话周期内有效。
很明显,http是无状态的,所以asp.net会定时清理超过时间没有连接的客户端session。

另外,所有的变量,在生命期结束以后,会被回收。比如对象不再被引用了,那么里面的成员自然也没用了。

asp.net是怎么管理session里面对象和application里面的对象的,仔细看看msdn。
demoooo 2010-05-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 despird 的回复:]
如果你的Hashtable对象不是static的,a页面和b页面创建的是不同的对象。如果对象不是静态的,即使都是a页面创建的,每次请求访问a页面hashtable对象内容也不会保存的,除非你用session保存hashtable对象。还是那句话,hashtable只是类型,能否保存数据取决于你把对象保存在什么位置,和如何访问。
对于你这个问题,你如果想使用Hashtable缓存数据,一个途径是把……
[/Quote]

基本明白了,谢谢. 看来我看到用Hashtabel做缓存的只是临时"缓存",只在一个进程请求期间内保存重复调用的数据.

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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