关于Asp.net页面实例化的问题,理论问题,基础不牢,诚请高手解答。

Lukiya 2007-07-27 09:25:20
当第一个用户访问后,页面类产生一个实例。

其他用户访问的是刚才产生那个实例还是针对每个用户分别产生不同的实例?
...全文
322 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lukiya 2007-08-21
  • 打赏
  • 举报
回复
To: cat_hsfz([MVP]dotNET.CatChen.biz)

页面的Cache属性必须要lock,否则要造成应用池挂掉。前车之鉴…………
HttpRuntime.Cache可以不lock

谢谢大家,结贴。
ttg520 2007-07-28
  • 打赏
  • 举报
回复
学习
cat_hsfz 2007-07-28
  • 打赏
  • 举报
回复
另外Cache不是用来长期存放重要数据的,只是一个基本的缓存,也就是说当你有一些数据将来可能要使用时就放到Cache中,并且这些数据将来即使因为Cache过期而无法拿回也不会造成损失。如果不符合以上条件,例如Cache过期导致这些数据丢失将是严重问题,那么你需要的其实不是Cache而是Application或者别的东西。

基于以上原则,Cache并不需要lock这样“先进”的操作方式,你有数据并且这些数据将来可能还要用到而Cache能提升性能那么你就放进去,同一个Cache名称内指代的就是这种数据的最新版本,因此是没必要lock的。
cat_hsfz 2007-07-28
  • 打赏
  • 举报
回复
Page是每次请求一个新实例的。然而Cache并不属于Page,它其实属于HttpApplication,是整个HttpApplicaiton内共享一个实例的,只不过Page内有一个Page.Cache的属性方便你访问它,这样你就不用写HttpApplication.Current.Cache而可以直接写Cache。
Lukiya 2007-07-27
  • 打赏
  • 举报
回复
错了,dobule check
Lukiya 2007-07-27
  • 打赏
  • 举报
回复
To skyyun(落枫飘零):

肯定不能lock Cache,因为Cache那时候是空的。

To bigmingming:

恩,谢谢。但是这个singelton例子有缺陷。应该double lock,或者静态初始化。
bigmingming 2007-07-27
  • 打赏
  • 举报
回复
楼主是想实现单件模式(Single Pattern)
有个例子,可以供参考:
1public sealed class Singleton
2{
3 static Singleton instance=null;
4 static readonly object padlock = new object();
5
6 Singleton()
7 {
8 }
9
10 public static Singleton Instance
11 {
12 get
13 {
14 lock (padlock)
15 {
16 if (instance==null)
17 {
18 instance = new Singleton();
19 }
20 return instance;
21 }
22 }
23 }
skyyun 2007-07-27
  • 打赏
  • 举报
回复
我也想知道,是不是应该lock(Cache)
Lukiya 2007-07-27
  • 打赏
  • 举报
回复
哦,好的,再问个问题,我要确保页面的Cache属性线程安全。
所以定义一个Locker对象用来lock此Cache,如下

private object _obj = new object();

if (Cache["Test"] == null)
{
lock (_obj)
{
if (Cache["Test"] == null)
{
// 填充Cache操作
}
}
}

这里这个_obj是不是定义错了?应该加上static声明,是不是 ?
xmlquit 2007-07-27
  • 打赏
  • 举报
回复
分别产生不同的实例
honey52570 2007-07-27
  • 打赏
  • 举报
回复
学习

帮顶
lishijie910123 2007-07-27
  • 打赏
  • 举报
回复
学习哈
showmy 2007-07-27
  • 打赏
  • 举报
回复
关注学习下 JF
vainnetwork 2007-07-27
  • 打赏
  • 举报
回复
关注,帮顶了
蝶恋花雨 2007-07-27
  • 打赏
  • 举报
回复
关注学习下帮顶
whw123456 2007-07-27
  • 打赏
  • 举报
回复
关注~
LutzMark 2007-07-27
  • 打赏
  • 举报
回复
我觉得应该加static声明
  • 打赏
  • 举报
回复
Cache是空的,还是Cache["Test"]是空的?

62,041

社区成员

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

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

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

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