asp.net asax文件利用与计数器实例[网站编程]
本文“asp.net asax文件利用与计数器实例[网站编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
application对象(httpapplicationstate 范例,译者按:application对象是httpapplication类的一个属性,是web利用程序全局唯一的,web利用程序第一次有恳求进来的时刻成立的) 是我们在web利用程序内保存全局信息的地方,application对象是一个很便利的保存全局信息的地方,比方保存数据库教程的衔接字符串:
private void page_load(object sender, system.eventargs e)
{
string connectionstring = application["connectionstring"].tostring();
. . .
}
你也可以在httpapplication类中声明静态成员变量来保存利用程序状况信息,比方,上例中的数据库衔接字符串可以用以下方法保存.
public class global : system.web.httpapplication
{
public static readonly string connectionstring = "connection information";
. . .
}
可以在asp教程.net代码的任何地方拜候该静态成员变量,比方:string connectionstring = global.connectionstring;
非常重要的一点是,假如你想让该字符串可以全局范围内被拜候到,则该字符串必须声明为静态成员变量(你也可以成立一个静态的属性).
相反,假如你在global范例利用普通成员变量(非静态),则只能用来保存恳求状况,举个例子来阐明,下面的代码将在调试窗口中输出全部恳求的处理时间(毫秒)
public class global : system.web.httpapplication
{
protected datetime beginrequesttime;
protected void application_beginrequest(object sender, eventargs e)
{
beginrequesttime = datetime.now;
}
protected void application_endrequest(object sender, eventargs e)
{
string messageformat = "elaps教程ed request time (ms) = {0}";
timespan difftime = datetime.now - beginrequesttime;
trace.writeline(
string.format(messageformat, difftime.totalmilliseconds ) );
}
. . .
}
好,目前让我们回到上面关于保存利用程序状况的话题.那个办法更好的呢:在application对象中保存对象的引用,还是在global类中声明静态成员或属性?各种方法各有优劣.在global类中保存全局静态成员可以使你的数据拜候具有强范例,不象application对象,你不需求举行范例转换,下面的代码阐明了它们的辨别:
dataset cacheddata = (dataset)application[“mydataset”];
string mystring = application[“mystring”].tostring();
dataset cacheddata = global.mydataset;
string mystring = global.mystring;
强范例使你的的代码越发清楚和强壮,在利用程序性能要求对比高的情形下,这种方法可以避免运行时范例转换带来的性能丧失.假如你保存的是值范例的数据,强范例还可以避免装箱(boxing)和卸箱(unboxing)所带来的性能丧失.别的,application对象还有因为线程同步造成的锁定所带来的性能上问题.假如你的全局数据只初始化一次,再也不会改变,利用global类中的静态成员可以避免锁定带来的性能丧失.但,假如你采取了这种方法,激烈举荐你利用拜候器(属性),以保证该变量是只读的.假如你既要读又要写在global类中的静态成员变量,记着要保证线程安全.application对象通过获得读写锁已经内涵的供应了线程安全保证.
看一下操纵asax文件做网站计数器
增添了global.asax,app_code文件夹下global.asax.cs,文本文件site_counter.txt并写入数字0,代码辨别以下:
global.asax
<%@ application inherits="linker.global" language="c#" %>
global.asax.cs
using system;
using system.data;
using system.configuration;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
using system.io;
namespace linker
...{
/**//// <summary>
/// global 的择要阐明
/// </summary>
public class global : httpapplication
...{
public global()
...{
//
// todo: 在此处增添构造函数逻辑
//
}
protected void application_start(object sender, eventargs e)
...{
// 在利用程序启动时运行的代码
streamreader rd = new streamreader(server.mappath("site_counter.txt"));
application.lock();
application["site_counter"] = int.parse(rd.readline());
application.unlock();
rd.close();
}
protected void session_start(object sender, eventargs e)
...{
// 在新会话启动时运行的代码
application.lock();
application["site_counter"] = convert.toint32(application["site_counter"]) + 1;
application.unlock();
streamwriter wt = new streamwriter(server.mappath("site_counter.txt"), false);
application.lock();
wt.writeline(application["site_counter"]);
application.unlock();
wt.close();
}
}
}
然后在需求显示的页面显示系统 便可以了
比方简单的:
label_site_counter.text = convert.tostring(application["site_counter"]);
以上是“asp.net asax文件利用与计数器实例[网站编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |