|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在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复习了一遍,发现了许多以前还不知道的细节。 |
|