我在web程序中
namespace myweb
{
public class function
{
public static bool channel_flag=false;
public static void channelname_init()
{
channel_flag=true;
}
}
}页面中
if (!myweb.function.channel_flag)
{
myweb.function.channelname_init();
}
我的原意是只要有一个浏览者触发了channelname_init()
其他人就不用再触发了。但是每隔3-7分钟function.channel_flag又会=false
又会有人触发channelname_init()我知道重启IIS,修改web.config,和Recycle Application Pool会回收内存(服务器是windows 2003),并初始化static 变量。
但我确定,以上都没发生,为什么static 变量还是被初始化了呢?
namespace myweb
{
public class function
{
public static bool channel_flag=false;
public static void channelname_init()
{
channel_flag=true;
}
}
}页面中
if (!myweb.function.channel_flag)
{
myweb.function.channelname_init();
}
我的原意是只要有一个浏览者触发了channelname_init()
其他人就不用再触发了。但是每隔3-7分钟function.channel_flag又会=false
又会有人触发channelname_init()我知道重启IIS,修改web.config,和Recycle Application Pool会回收内存(服务器是windows 2003),并初始化static 变量。
但我确定,以上都没发生,为什么static 变量还是被初始化了呢?
解决方案 »
- net怎么实现根据ip获取所在您当前所在的位置
- [求助] onmouseover事件动态绑定repeater数据
- 微信自动回复,不知道哪个高手做过,回复语句数据库该怎么设计。有没有现成的解决方案。
- .NET的页面用DREAMWEAVER编辑后就所有功能就不好用了
- (初学者)datgrid加checkbox.我用js来判断checkboxs是否选中,怎么传参?
- 请大家指教了!如何按照邮箱地址发送邮件啊?
- JS如何获取iframe内html的body值
- 删除DataList中嵌套的DataList之中的数据行事在什么事件中写
- 乱码非"乱马"?
- 几点建议
- |zyciis| 为什么Textbox的OnTextChanged事件添加了onkeyup事件后就不响应,奇怪了,谢谢
- 关于Ext扩展自定义控件中内部事件的问题
还有覆盖bin目录,修改程序文件等,会初始化static 变量。 但我确定,以上都没发生,一直在运行中,没改动任何东西,为什么static 变量还是被初始化了呢?
其他人就不用再触发了。 那還不如直接就寫死成 public static bool channel_flag=true;
是因为channelname_init()
是数据库初始化方法。读一个数据库,给后来所有的浏览者看。
namespace myweb
{
public class function
{
public static bool channel_flag=false;
public static void channelname_init()
{
数据库初始化读到Cache
channel_flag=true; //标志位,说明已经初始化完成,下一个浏览者看到channel_flag=true,直接调用Cache,而不必读数据库。
}
}
}
一个用户浏览一次你的网站,网站运行一次程序,生成应答后就把资源释放了
你要保存一个变量的话,试试用Application[变量名]=false;
然后一个用户点击一次后将它赋值为true
之后在Session_Start函数中设置定时,3-7分钟后将它赋值为false
这样或许就能满足你的要求了吧
迄今为止,包括微软官方资料在内,还没有人能够说出所有可能造成web应用程序重启的原因。web应用程序重启是一个正常的维护行为,很多原因都可能造成,例如我可以设置当连接数达到500的时候就重启一次,或者每当剩余物理内存小于500M的时候就重启一次,等等。编写asp.net程序,就要假设服务器每当几分钟就在你处理完页面后立刻自动重启一次,这样才能写出真正可靠的web应用程序。这是对合格的asp.net应用程序的基本要求,我会这样验收任何asp.net程序。
{
数据库初始化读到Cache
channel_flag=true; //标志位,说明已经初始化完成,下一个浏览者看到channel_flag=true,直接调用Cache,而不必读数据库。
HttpRuntime.Cache.Insert("channel_flag", "hahaha");
}
看看下次channel_flag被初始化的时候,HttpRuntime.Cache["channel_flag"] 是不是== null
如果==null说明内存被释放了,如果HttpRuntime.Cache["channel_flag"].ToString()==“hahaha”,
那就说明内存没被释放,static变量却初始化了。先等着看看日志吧。
channel_flag==false
完全是初始化时的状态。
但是w3wp.exe进程CUPtime不是0:00:00,Mem Usage还是400多MB,说明没有重启啊,内存也没有降下去啊。
根本不用关心缓存有没有数据,只管从缓存取数据就行了,而对于数据提供层来说,被调用时候就只需检查一下缓存,如果缓存没有就从数据库填充进去。举个简单例子:
aspx 页面读取新闻数据DataTable news = DataAccess.GetNews();
DataAccess.cs
{
//构造函数,检查cache,如空则填充
DataAccess()
{
}
static DataTable GetNews()
{
return cache["news"] as Datatable;
}
UP..这个是标准答案。。你这种用static保存全局变量的方法是不太可行的。。可以放到Cache中,或者Application中..