在多人访问同一个页面的时候,会有多少个DataSet实例的疑问,欢迎有兴趣的来指导下!

xu8512 2008-08-28 02:57:22
为表述方便,假设GetDs()方法会返回一个DataSet实例,注意:是实例不是引用,其内部实现不做讨论。
那么在下面三种情况中,服务器的内存中会有多少个DataSet实例存在?

第一种情况:直接在页面中获取DataSet,并绑定到页面中。当有多个用户同时访问该页面时,服务器内存中是不是会
有多个DataSet存在?

第二种情况:在一个类中定义了一个属性,它可以返回对DataSet实例的引用。DataSet的实例通过GetDs()方法获取,
用户访问页面的时候,会实例化一个该类的对象,然后通过该属性来获取到DataSet并绑定到页面。这时,如果有多个用户
同时访问页面,服务器内存中是不是有多个DataSet实例?

第三种情况:如果第二种情况中的类是个静态类,所以不需要实例化就可以在页面中获取到对DataSet的引用,然后绑定到页面
。在这种情况下,如果有多个用户访问页面,服务器内存中的DataSet情况如何?

本人愚钝,一直没想明白这个问题,希望大家可以告知。另外,还希望告知,怎么才能进行测试,来检验自己的猜想???
...全文
176 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeflying1222 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 youbl 的回复:]
上面写错了,最后应该是:

C# code
private static DataSet ds;
public static DataSet GetDs(){
if(ds ==null)
ds = new DataSet();
……
}
[/Quote]

难怪经常看见代码要加怎么一个判断,懂了,呵呵
jack20080808 2008-08-28
  • 打赏
  • 举报
回复
1,2每个用户请求都产生一个,最后一个是只有一个
LQknife 2008-08-28
  • 打赏
  • 举报
回复
晓习
pellet 2008-08-28
  • 打赏
  • 举报
回复
1,2是多个
因为每个请求都会实例化一个页面的类滴...

3就比较奇怪的,类可是没有静态的哦,你的意思大概是类里面DataSet是静态的变量吧
这种情况只有一个的
浮生若梦丶 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 atlasroben 的回复:]
第一种情况:直接在页面中获取DataSet,并绑定到页面中。当有多个用户同时访问该页面时,服务器内存中是不是会
有多个DataSet存在?

俺觉得这个dataset放到viewstates里面了跟随页面传递给客户端,当提交的时候服务器再读取客户端提交上来的dataset对象

第二种情况:在一个类中定义了一个属性,它可以返回对DataSet实例的引用。DataSet的实例通过GetDs()方法获取,
用户访问页面的时候,会实例化一个该类的对象,然…
[/Quote]
cteddy 2008-08-28
  • 打赏
  • 举报
回复
这个问题讨论的很有意思啊
应该请个设计C#的来解释啊
哈哈
记号,看看最后的结果会是什么
ojekleen 2008-08-28
  • 打赏
  • 举报
回复
我个人理解三种效果都是相同的,虽然GetDs是静态方法,但是每次使用的时候都得GetDs,所以应该也是每人一个.
要想大家共享一个你可以在你的页面里定义一个静态dataset,这个不提倡,应该很有可能dataset是会改变的,
但页面定义静态那就不会改变了,最好的办法就是用缓存保存住这个dataset,每次取DS的时候就从缓存里面取出来.
这种效果有点像在页面写个静态的DS,但是缓存会过期,静态不过期,所以缓存是有优势的.
游北亮 2008-08-28
  • 打赏
  • 举报
回复
上面写错了,最后应该是:

private static DataSet ds;
public static DataSet GetDs(){
if(ds ==null)
ds = new DataSet();
……
}
游北亮 2008-08-28
  • 打赏
  • 举报
回复
每个用户访问页面,都是创建不同的进程,所以对于1,2
自然是每个人一个DataSet了

对于第3种情况
如果GetDs()方法类似下面,那么内存中会保留最后一个DataSet,前面的无数DataSet要看垃圾收集器是否处理了,如果没有处理,那内存中也是每个人一个DataSet:

private static DataSet ds;
public static DataSet GetDs(){
ds = new DataSet();
……
}


如果类似下面的情况,那内存中始终只有一个DataSet

private static DataSet ds;
public static DataSet GetDs(){
if(ds !=null)
ds = new DataSet();
……
}
chenyijiu 2008-08-28
  • 打赏
  • 举报
回复
感觉1.2一样,每人一个dataset,3就是一个dataset
atlasroben 2008-08-28
  • 打赏
  • 举报
回复
第一种情况:直接在页面中获取DataSet,并绑定到页面中。当有多个用户同时访问该页面时,服务器内存中是不是会
有多个DataSet存在?

俺觉得这个dataset放到viewstates里面了跟随页面传递给客户端,当提交的时候服务器再读取客户端提交上来的dataset对象

第二种情况:在一个类中定义了一个属性,它可以返回对DataSet实例的引用。DataSet的实例通过GetDs()方法获取,
用户访问页面的时候,会实例化一个该类的对象,然后通过该属性来获取到DataSet并绑定到页面。这时,如果有多个用户
同时访问页面,服务器内存中是不是有多个DataSet实例?
你如果让

我觉得这种情况表面上看来是你将引用给了客户但是实际上应该是服务器有dataset对象,但是页面文件的viewstates上面还会被保存一份
实际上是加大了开销

第三种情况:如果第二种情况中的类是个静态类,所以不需要实例化就可以在页面中获取到对DataSet的引用,然后绑定到页面
。在这种情况下,如果有多个用户访问页面,服务器内存中的DataSet情况如何?
这种情况还是和上面的情况差不多,但是你的是静态类,也就是所有的页面都用到一个同样的对象其中一个用户更改会影像到其他用户吧

本人愚见,抛砖引玉
西安风影 2008-08-28
  • 打赏
  • 举报
回复
mark
locoasta 2008-08-28
  • 打赏
  • 举报
回复
我的理解是3种情况都会每个用户产生一个DataSet
应为asp.net会为每个登录的用户产生一个线程处理请求的,当然也会产生多个内存分配了。
我自己的理解哈 不对的指出

62,243

社区成员

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

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

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

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