NET网页编程之半途封闭ASP.NET是不是会影响服务器真个实行?
在VC.net的版本上,为了让C++运行在.NETFramework中,微软为C++引进了托管,就是托管C++(ManagedC++),这个根本就没有流行起来,自托管C++产生以后就没有收到过好评。在实行ASP.NET页面过程当中,总不免会呈现如许那样的成绩,对照典范的一个成绩就是当一个ASPX页面实行到一半的时分,扫瞄器封闭了这个页面,那末服务器端对应的这个页面的代码还在实行么?履历证实,除非你在代码内里做了特别判别,不然代码仍旧正在实行。
注重点:
1、客户端显现页面的时分,背景已实行完了的页面临象早已不存在了。固然这时候候谈不上服务器段实行不实行的成绩了。
2、页面还没有前往,处于守候形态的时分。封闭ASPX页面,才会触及到下面提到的服务器端仍旧在实行的情形。
3、客户端封闭的时分基本不向服务器发送指令。
4、除非你代码内里做了特别判别,这里的特别判别指用
if(!Response.IsClientConnected)
来检测形态而用代码停止运转。
上面的复杂代码就是演示封闭页面后,看是不是仍旧在实行?
你能够在这个页面翻开后,还没有前往任何信息的时分把这个页面封闭,然后看指定目次下是不是有对应文件被创立并填写内容。
protectedvoidPage_Load(objectsender,EventArgse)
{
StringBuildertxt=newStringBuilder();
txt.AppendLine();
txt.AppendLine(DateTime.Now.ToString("u"));
txt.AppendLine("asvd");
Response.Write(DateTime.Now.ToString("u"));
Response.Write("
");
Thread.Sleep(50000);
txt.AppendLine(DateTime.Now.ToString("u"));
Response.Write(DateTime.Now.ToString("u"));
Response.Write("
");
//把一些信息写到别的一个文件,借此观察是不是正在运转
stringdir=Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"logs");
if(!Directory.Exists(dir))
Directory.CreateDirectory(dir);
DateTimedt=DateTime.Now;
stringshortfileName=string.Format("errors_{0:0000}{1:00}{2:00}.log",dt.Year,dt.Month,dt.Day);
stringfileName=Path.Combine(dir,shortfileName);
StreamWritersw;
if(File.Exists(fileName))
sw=File.AppendText(fileName);
else
sw=File.CreateText(fileName);
sw.Write(txt.ToString());
sw.Close();
sw=null;
}
作了特别判别的情形复杂例子:
注重:IsClientConnected的判别在VS.net开辟工具自带的开辟站点ASP.NETDevelopmentServer是不撑持的。ASP.NETDevelopmentServer永久前往true。
IIS才是撑持的。
protectedvoidPage_Load(objectsender,EventArgse)
{
StringBuildertxt=newStringBuilder();
for(inti=0;i<100;i++)
{
if(this.Response.IsClientConnected)
{
txt.AppendLine();
txt.AppendLine(DateTime.Now.ToString("u"));
txt.AppendLine(i.ToString());
Response.Write(DateTime.Now.ToString("u"));
Response.Write("
");
Thread.Sleep(500);
}
else
{
Response.End();
return;
}
}
txt.AppendLine(DateTime.Now.ToString("u"));
Response.Write(DateTime.Now.ToString("u"));
Response.Write("
");
//把一些信息写到别的一个文件,借此观察是不是正在运转
stringdir=Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"logs");
if(!Directory.Exists(dir))
Directory.CreateDirectory(dir);
DateTimedt=DateTime.Now;
stringshortfileName=string.Format("errors_{0:0000}{1:00}{2:00}.log",dt.Year,dt.Month,dt.Day);
stringfileName=Path.Combine(dir,shortfileName);
StreamWritersw;
if(File.Exists(fileName))
sw=File.AppendText(fileName);
else
sw=File.CreateText(fileName);
sw.Write(txt.ToString());
sw.Close();
sw=null;
}
这个例子中是发明中止,就丢弃之前做的任何器材。
固然我们也能够复杂的修正上述代码,让把已处置完成的器材纪录上去,相似上面的代码
protectedvoidPage_Load(objectsender,EventArgse)
{
StringBuildertxt=newStringBuilder();
for(inti=0;i<100;i++)
{
if(this.Response.IsClientConnected)
{
txt.AppendLine();
txt.AppendLine(DateTime.Now.ToString("u"));
txt.Append("**********");
txt.AppendLine(i.ToString());
Response.Write(DateTime.Now.ToString("u"));
Response.Write("
");
Thread.Sleep(500);
}
else
{
break;
}
}
txt.AppendLine(DateTime.Now.ToString("u"));
Response.Write(DateTime.Now.ToString("u"));
Response.Write("
");
//把一些信息写到别的一个文件,借此观察是不是正在运转
stringdir=Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"logs");
if(!Directory.Exists(dir))
Directory.CreateDirectory(dir);
DateTimedt=DateTime.Now;
stringshortfileName=string.Format("errors_{0:0000}{1:00}{2:00}.log",dt.Year,dt.Month,dt.Day);
stringfileName=Path.Combine(dir,shortfileName);
StreamWritersw;
if(File.Exists(fileName))
sw=File.AppendText(fileName);
else
sw=File.CreateText(fileName);
sw.Write(txt.ToString());
sw.Close();
sw=null;
}
必要注重的是,利用isClientConnected是要占用必定的体系资本的。
isClientConnected实践上必要向客户端输入一点器材,然后才晓得客户端是不是仍旧在线。
如许,除非你的使用十分耗时,不然倡议你不要用isClientConnected。以免判别isClientConnected利用的资本比你实践营业逻辑利用的资本还要多。
在任何情形下,Response.IsClientConnected都要有些开支,以是,只要在实行最少要用500毫秒(假如想保持每秒几十页的吞吐量,这是一个很长的工夫了)的操纵前才利用它。作为一般的划定规矩,不要在严密轮回的每次迭代中挪用它,比方当绘制表中的行,大概每20行或每50行挪用一次。
今天去面试,被问到C#中的new关键字,看了那么多的书对new关键字还是有一定认识,回来又把new复习了一遍,发现了许多以前还不知道的细节。 asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源 虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。 HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了. 是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。 它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。 我的意思是.net好用,从功能上来说比JAVA强还是很明显的。 ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。 平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
页:
[1]