日期:2014-05-18  浏览次数:20384 次

问个很初级的,关于页面声明变量的问题。
C# code

public partial class datatable : System.Web.UI.Page
{
   private DataTable dt = new DataTable("Table_AX");

   protected void Page_Load(object sender, EventArgs e)
    {
      //..............
    }
}



请问,如果这个网页被打开多个,那么这个dt是也有多个么? 还是所有的网页公用这一个dt变量,会乱掉么?
是哪种情况?

------解决方案--------------------
privat是私有变量只能再类内使用。dt只能有一个
------解决方案--------------------
肯定不能乱放心,内部机制就处理好了,
------解决方案--------------------
不会有多个,如果那样.想象一下,有100W人访问.那会如何.哪种是int类型服务器...
------解决方案--------------------
跟私有公有没关系...实例变量对每个实例都是独立的,且只在实例生存期有效...怎么会乱掉?

打好基础...
------解决方案--------------------
我们用数量方式来描述一下:假设1个小时之内有500个用户总共提交了1万次对此页面的请求,那么就至少创建了1万个Page对象,每一个Page对象中都有dt,不同Page中的“此dt与彼dt”毫无关系,因此也不会乱掉。

顺便说一下“此页面的请求”的真实背景:像当前这个csdn的页面,在你打开或者点击“提交回复”而刷新时,它在你的机器上要向csdn的多个服务器分别提交30个(甚至更多)请求,尽管你只是看到一个页面被刷新了。

如果你将数据通盘考虑,会得到更好的效率。例如经常有人查询“.net板块文章列表”,你可以在访问第一页、第二页等时首先查询

Cache[".net板块文章列表第一页"]
或者
Cache[".net板块文章列表第二页"]

能不能返回值,如果没有返回值才真正读取数据库并放入相应的Cache单元。因为读取数据的操作总是比改写数据的操作多很多,所以花点时间和空间做缓存是很值得的。当把数据放入Cache单元时,你可以查Cache.Insert方法的第三、第四、第五个参数,你可以设置缓存依赖于数据库更新、文件更新、其它Cache单元更新等来自动及时地清除掉(这样内存中才不会保存“脏”数据)。