放SESSION或者VIEWSTATE,在存入SESSION或VIEWSTATE之前将对象序列化 clsSub sub = null; if (!Page.IsPostback) { sub = new clsSub(); } else { sub = ViewState["YOUR_OBJ_NAME"]; }
对于有经验的asp.net开发人员,请不要使用cache来“解决”这个问题。并且也尽量不要使用静态对象、Session、Application等。Cache是由它自己的原则(例如内存是否够用、时间是否够长)来决定消灭所保存的对象的。保存在cache中对象必须是“备份”,并且你从cache中查询不到对象时必须可以从数据库等其它地方重建一份。使用session、application的问题则出在web应用的整体结构上。如果你修改web.config、或者app_code目录下的代码文件,以及iis自身管理需要(例如内存少、收回应用程序缓冲池)等等,web应用程序都会重新启动。如果客户端访问网站,在网页上触发令一个操作之前网站重新应用启动了,客户端感觉不出来,可以继续访问同一个网页。如果你把数据保存在session、application上,那么就会运行中出错。如果租用服务器就会看得很明显,你的应用程序很可能每隔十几分钟,session、application中的数据就“丢失”了。在自己本地pc上开发web软件的时候,本地pc的环境实在是太“理想化”了。如果缺乏系统上线经验,容易忽略真正去测试程序能否生存在有压力的web服务器上。你如果不能选择一种很好的对象持久化系统,那么就不要持久化它。你只能把 sub 只向的对象的数据在page_unload时写入数据库,在page_load时再读取出来。
if(!PostBack)
{
clsSub sub = new clsSub();
}
{
clsSub sub;
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack){
sub=new clsSub();
}
}
}这样还是会被重新初始化啊
// Do processing
}
// Do processing
}和if(!IsPostBack)有区别吗?
如果会分配空间,分配多大,为什么????要是搞懂的话,这样的问题就迎刃而解了
clsSub sub = new clsSub();
过程.........
sub=null
------------------------------------------------------------------
一篇介绍nhibernate的文章。
怎么说那,包装了数据访问+session,不过session换了名了叫做会话工厂,微软真是够搞笑!
clsSub sub = null;
if (!Page.IsPostback)
{
sub = new clsSub();
}
else
{
sub = ViewState["YOUR_OBJ_NAME"];
}
{
sub = new clsSub();
}
---------------
类实例必须序列化保存...原因...你去看看HTTP协议和ASP.NET页面生存周期都是怎么回事就明白了...
{
clsSub sub = new clsSub();
}
{
get
{
if (m_Instance == null)
{
lock (typeof(SampleSingleton2))
{
if (m_Instance == null)
{
m_Instance = new SampleSingleton2();
}
}
} return m_Instance;
}
}
单键模式在这里不解决问题