<tr>
<td align="center" bgcolor="#f2f2f2"><iframe src='../love/newup.asp' width='0%' height='0' frameborder='0' scrolling='no'></iframe></td>
</tr>
<SCRIPT language="JavaScript">
<!--
function openpopup(){
url="http://www.91qz.com/index.html"
window.open(url)
}
function get_cookie(Name) {
var search = Name + "="
var returnvalue = "";
if (document.cookie.length > 0) {
offset = document.cookie.indexOf(search)
if (offset != -1) {
offset += search.length
end = document.cookie.indexOf(";", offset);
if (end == -1)
end = document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset, end))
}
}
return returnvalue;
}
function helpor_net(){
if (get_cookie('popped')==''){
openpopup()
document.cookie="popped=yes"
}
}
helpor_net()
//-->
</SCRIPT>
<html>
<head>
<title>ASP & ASP.NET 网站性能设计之Cache动态使用</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
A{TEXT-DECORATION: none;}
A:hover{COLOR: #CC0000;}
A:link {color: #000000;}
A:visited {color: #000000;}
BODY
{
FONT-SIZE: 9pt;background:#eeeeee
}
TD
{
FONT-FAMILY:宋体;FONT-SIZE: 9pt;line-height: 150%;
}
Input
{
BACKGROUND-COLOR: #f6f6f6;
BORDER-BOTTOM: #FF9900 1px solid;
BORDER-LEFT: #FF9900 1px solid;
BORDER-RIGHT: #FF9900 1px solid;
BORDER-TOP: #FF9900 1px solid;
COLOR: #000000;
HEIGHT: 18px;
border-color: #FF9900 #FF9900 #FF9900 #FF9900; font-size: 9pt
}
Button
{
FONT-SIZE: 9pt;HEIGHT: 20px;
}
Select
{
FONT-SIZE: 9pt;HEIGHT: 20px;
}
.border
{
border: 1px solid #FF9900;
}
.border2
{
background:#ffffff;BORDER-bottom: #ff9900 1px solid;
}
.title_txt
{
background:url(Skin/3/topBar_bg_20.gif);
}
.title
{
background:url(Skin/3/title.gif);height: 22;
}
.tdbg
{
background:#ffffff;line-height: 150%;
}
.txt_css
{
background:url(Skin/3/txt_css.gif);height: 36;
}
.title_lefttxt
{
}
.title_left
{
background:url(Skin/3/title_left.gif);height: 39;
}
.tdbg_left
{
background:url(Skin/3/tdbg_left.gif);
line-height: 150%;
}
.title_left2
{
background:url(Skin/3/L_BOTTOM.GIF);height: 25;
}
.tdbg_left2
{
background:url(Skin/3/tdbg_left2.gif);height: 13;
}
.tdbg_leftall
{
background:#f6f6f6;
}
.title_maintxt
{
filter:DropShadow(Color=#ffffff, OffX=1, OffY=1, Positive=1)
}
.title_main
{
background:url(Skin/3/title_main.gif);height: 22;
}
.tdbg_main
{
background:url(Skin/3/tdbg_main2.GIF);line-height: 100%;
}
.title_main2
{
background:url(Skin/3/maintop.gif);height: 202;
}
.tdbg_main2
{
background:url(Skin/3/tdbg_main3.GIF);height: 27;
}
.tdbg_mainall
{
background:url(Skin/3/kt01-p1.GIF);
}
.title_righttxt
{
filter:Glow(Color=#ffffff, Strength=5)
}
.title_right
{
background:url(Skin/3/title_right.gif);height: 31;
}
.tdbg_right
{
background:#ffffff;
}
.title_right2
{
background:url(Skin/3/title_right2.gif);height: 22;
}
.tdbg_right2
{
background:url(Skin/3/tdbg_right2.gif);height: 22;
}
.tdbg_rightall
{
background:#fffce1;BORDER: #FF9900 1px solid;
}
.topborder
{
background-image: url(Skin/3/topborder.gif);
}
.nav_top
{
background-image: url(Skin/3/nav_top.gif);height: 25;
}
.nav_main
{
line-height: 150%;background:url(Skin/3/nav_main.gif);
line-height: 150%;height: 134;
}
.nav_bottom
{
background-image: url(Skin/3/nav_bottom.gif);
}
.nav_menu
{
background:url(Skin/3/nav_menu.gif);height: 24;
}
.menu
{
background-color: #ff9900;width:97%;border: 1px;
}
td.MenuBody
{
background-color: #fffce1;
}
</style>
<script language="JavaScript" type="text/JavaScript">
function HideMenu()
{
}
</script>
<script type='text/javascript' language='JavaScript1.2' src='stm31.js'></script>
<script language="JavaScript" type="text/JavaScript">
//双击鼠标滚动屏幕的代码
var currentpos,timer;
function initialize()
{
timer=setInterval ("scrollwindow ()",30);
}
function sc()
{
clearInterval(timer);
}
function scrollwindow()
{
currentpos=document.body.scrollTop;
window.scroll(0,++currentpos);
if (currentpos !=document.body.scrollTop)
sc();
}
document.οnmοusedοwn=sc
document.οndblclick=initialize
</script>
</head>
<body leftmargin=0 topmargin=0 οnmοusemοve='HideMenu()'>
<noscript><iframe src=*></iframe></noscript>
<script src="fade.js"></script>
<SCRIPT language=javascript>
function show(){
var D=new Date()
var M=D.getMonth()+1
var H=D.getHours()
var m=D.getMinutes()
var S=D.getSeconds()
var W=Array()
W[0]="<font color=#ffa200>星期日</font>"
W[1]="星期一"
W[2]="星期二"
W[3]="星期三"
W[4]="星期四"
W[5]="星期五"
W[6]="<font color=red>星期六</font>"
if(H<10)H="0"+H
if(m<10)m="0"+m
if(S<10)S="0"+S
if(document.all)date.innerHTML="<font color=#000000>"+M+"月"+D.getDate()+"日"+" "+W[D.getDay()]+" "+H+":"+m+":"+S+"</font>"
setTimeout("show()",1000)
}
</SCRIPT>
<STYLE>
body
{background-image:url(yslm/bg_test.gif); background-position:center; cursor: url(01.ani)}
</STYLE>
<body leftmargin="0" topmargin="0" οncοntextmenu="return false" onselectstart="return false" οndragstart="return false">
<script language=javascript>
nereidFadeObjects = new Object();
nereidFadeTimers = new Object();
function nereidFade(object, destOp, rate, delta){
if (!document.all)
return
if (object != "[object]"){ //do this so I can take a string too
setTimeout("nereidFade("+object+","+destOp+","+rate+","+delta+")",0);
return;
}
clearTimeout(nereidFadeTimers[object.sourceIndex]);
diff = destOp-object.filters.alpha.opacity;
direction = 1;
if (object.filters.alpha.opacity > destOp){
direction = -1;
}
delta=Math.min(direction*diff,delta);
object.filters.alpha.opacity+=direction*delta;
if (object.filters.alpha.opacity != destOp){
nereidFadeObjects[object.sourceIndex]=object;
nereidFadeTimers[object.sourceIndex]=setTimeout("nereidFade(nereidFadeObjects["+object.sourceIndex+"],"+destOp+","+rate+","+delta+")",rate);
}
}
</script>
<table width="778" border="0" align="center" cellpadding="0" cellspacing="0">
<!-- fwtable fwsrc="δÃüÃû" fwbase="11.gif" fwstyle="Dreamweaver" fwdocid = "323594572" fwnested="0" -->
<tr>
<td><img src="images/spacer.gif" width="236" height="1" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="29" height="1" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="496" height="1" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="17" height="1" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="1" height="1" border="0" alt=""></td>
</tr>
<tr>
<td><img name="n11_r1_c1" src="images/11_r1_c1.gif" width="236" height="78" border="0" alt=""></td>
<td><img name="n11_r1_c2" src="images/11_r1_c2.gif" width="29" height="78" border="0" alt=""></td>
<td align="right" background="images/11_r1_c2.gif">
<table width="100%" border="0" cellspacing="0" cellpadding="1">
<tr>
<td width="70%"> <div align="left"style="margin-top:10px">
<IFRAME id=new_date border=0
src="top_files/news.htm" frameBorder=0 width=338 scrolling=no
height=30
target="_top"> 浏览器不支持嵌入式框架,或被配置为不显示嵌入式框架。</IFRAME>
</div></td>
<td width="30%" valign="bottom"><div align="right"style="margin-top:15px"><a href="mailto:webmaster@dongcn.com"><img src="Images/123.gif" alt="联系我们" border=0 style="FILTER: alpha(opacity=10)" onMouseOver=nereidFade(this,100,10,5) onMouseOut=nereidFade(this,50,10,5)></a> <a
onClick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.dongcn.com');"href="#"><img src="Images/122.gif" alt="设为首页" border=0 style="FILTER: alpha(opacity=10)" onMouseOver=nereidFade(this,100,10,5) onMouseOut=nereidFade(this,50,10,5)></a> <a href="javascript:window.external.AddFavorite('http://dongcn.com','动感中国(dongcn.com)')"><img src="Images/121.gif" alt="加入收藏" border=0 style="FILTER: alpha(opacity=10)" onMouseOver=nereidFade(this,100,10,5) onMouseOut=nereidFade(this,50,10,5)></a></div></td>
</tr>
<tr>
<td> </td>
<td id=date vAlign=bottom align=middle style="font-size:12px">
<SCRIPT>show()</SCRIPT>
</td>
</tr>
</table></td>
<td><img name="n11_r1_c4" src="images/11_r1_c4.gif" width="17" height="78" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="1" height="78" border="0" alt=""></td>
</tr>
</table>
<table width="778" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="3" bgcolor="#E4E4E4"></td>
</tr>
<tr align="center">
<td><table width="778" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right" background="adskin/hard_03.gif"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="2"></td>
</tr>
<tr>
<td align="left" valign="bottom"> <iframe id="baiduframe" border="0" vspace="0" hspace="0" marginwidth="0" marginheight="0"
framespacing="0" frameborder="0" scrolling="no" width="140" height="25"
src="http://unstat.baidu.com/bdun.bsc?tn=dongcnadm&csid=102&rkcs=0&bgcr=EDEDEB&ftcr=FF0000&rk=0&bd=0&bdas=0">
</iframe></td><td width="96%" align="left" valign="middle">
| <a href='Index.asp'>动感首页</a> | <a href='Article_Index.asp'><font color=#FF6600>动感教程</font></a> | <a href='Article_Speciallist.asp'>动感专题</a> | <a href='Photo_Index.asp'>动感图库</a> | <a href='music/index.asp'>动感音乐</a> | <a href='move_index.asp'>动感软件</a> | <a href='guestbook.asp'>动感留言</a> | <a href='../leadbbs/'>动感论坛</a> | <a href='http://www.dongcn.com/main/reg/index.asp'>动感域名</a> | </td>
</tr>
</table></td>
<td width="32" align="right" background="adskin/hard_03.gif"><img src="adskin/hard_04.gif" width="30" height="32"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="2"></td>
</tr>
</table>
<noscript>
<iframe src=*.htm></iframe></noscript>
<TABLE align=center background=img/2.gif border=1 cellPadding=0 cellSpacing=0 width=778 frame=vsides rules=none>
<TR>
<TD height=60 vAlign=top width=778><OBJECT classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0 height=150 width=773>
<PARAM NAME="movie" VALUE="img/1.swf"><PARAM NAME="quality" VALUE="high"><PARAM NAME="wmode" VALUE="transparent"><embed src="img/6.swf" width="773" height="150" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent"></embed></OBJECT>
</TD>
</TR>
</TABLE>
<table width="778" border="0" align="center" cellpadding="0" cellspacing="0">
<tr bgcolor="#FFFFFF">
<td height="2" colspan="3"></td>
</tr>
<tr>
<td width="19" height="22" bgcolor="#eeeeee"> </td>
<td width="748" align="right" bgcolor="#eeeeee">
<script type='text/javascript' language='JavaScript1.2'>
<!--
stm_bm(['uueoehr',400,'','images/blank.gif',0,'','',0,0,0,0,0,1,0,0]);
stm_bp('p0',[0,4,0,0,2,2,0,0,100,'',-2,'',-2,90,0,0,'#000000','transparent','',3,0,0,'#000000']);
stm_ai('p0i0',[0,'|','','',-1,-1,0,'','_self','','','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#cccccc',1,'','',3,3,0,0,'#fffff7','#000000','#000000','#000000','9pt 宋体','9pt 宋体',0,0]);
stm_aix('p0i1','p0i0',[0,'动感教程首页','','',-1,-1,0,'Article_Index.asp','_self','Article_Index.asp','','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#cccccc',1,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体','9pt 宋体']);
stm_aix('p0i2','p0i0',[0,'|','','',-1,-1,0,'','_self','','','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#cccccc',1,'','',3,3,0,0,'#fffff7','#000000','#000000','#000000','9pt 宋体','9pt 宋体',0,0]);
stm_aix('p0i3','p0i0',[0,'平面设计','','',-1,-1,0,'Article_Class2.asp?ClassID=1','_self','Article_Class2.asp?ClassID=1','平面设计','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#cccccc',1,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体','9pt 宋体']);
stm_bp('p1',[1,4,0,0,2,3,6,7,100,'progid:DXImageTransform.Microsoft.Fade(overlap=.5,enabled=0,Duration=0.43)',-2,'',-2,67,2,3,'#999999','#ffffff','',3,1,1,'#aca899']);
stm_aix('p1i0','p0i0',[0,'设计欣赏','','',-1,-1,0,'Article_Class2.asp?ClassID=5','_self','Article_Class2.asp?ClassID=5','设计欣赏','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_aix('p1i1','p0i0',[0,'设计理念','','',-1,-1,0,'Article_Class2.asp?ClassID=6','_self','Article_Class2.asp?ClassID=6','设计理念','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_aix('p1i2','p0i0',[0,'平面教程','','',-1,-1,0,'Article_Class2.asp?ClassID=7','_self','Article_Class2.asp?ClassID=7','平面教程','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_aix('p1i3','p0i0',[0,'鼠绘技巧','','',-1,-1,0,'Article_Class2.asp?ClassID=8','_self','Article_Class2.asp?ClassID=8','鼠绘技巧','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_ep();
stm_aix('p0i2','p0i0',[0,'|','','',-1,-1,0,'','_self','','','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#cccccc',1,'','',3,3,0,0,'#fffff7','#000000','#000000','#000000','9pt 宋体','9pt 宋体',0,0]);
stm_aix('p0i4','p0i0',[0,'网页设计','','',-1,-1,0,'Article_Class2.asp?ClassID=2','_self','Article_Class2.asp?ClassID=2','网页设计','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#cccccc',1,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体','9pt 宋体']);
stm_bp('p1',[1,4,0,0,2,3,6,7,100,'progid:DXImageTransform.Microsoft.Fade(overlap=.5,enabled=0,Duration=0.43)',-2,'',-2,67,2,3,'#999999','#ffffff','',3,1,1,'#aca899']);
stm_aix('p1i0','p0i0',[0,'技术教程','','',-1,-1,0,'Article_Class2.asp?ClassID=9','_self','Article_Class2.asp?ClassID=9','技术教程','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_aix('p1i1','p0i0',[0,'网络编程','','',-1,-1,0,'Article_Class2.asp?ClassID=10','_self','Article_Class2.asp?ClassID=10','网络编程','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_aix('p1i2','p0i0',[0,'网页资讯','','',-1,-1,0,'Article_Class2.asp?ClassID=11','_self','Article_Class2.asp?ClassID=11','网页资讯','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_aix('p1i3','p0i0',[0,'经典网站','','',-1,-1,0,'Article_Class2.asp?ClassID=12','_self','Article_Class2.asp?ClassID=12','经典网站','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_ep();
stm_aix('p0i2','p0i0',[0,'|','','',-1,-1,0,'','_self','','','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#cccccc',1,'','',3,3,0,0,'#fffff7','#000000','#000000','#000000','9pt 宋体','9pt 宋体',0,0]);
stm_aix('p0i5','p0i0',[0,'多媒体动画','','',-1,-1,0,'Article_Class2.asp?ClassID=3','_self','Article_Class2.asp?ClassID=3','多媒体动画','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#cccccc',1,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体','9pt 宋体']);
stm_bp('p1',[1,4,0,0,2,3,6,7,100,'progid:DXImageTransform.Microsoft.Fade(overlap=.5,enabled=0,Duration=0.43)',-2,'',-2,67,2,3,'#999999','#ffffff','',3,1,1,'#aca899']);
stm_aix('p1i0','p0i0',[0,'动画教程','','',-1,-1,0,'Article_Class2.asp?ClassID=13','_self','Article_Class2.asp?ClassID=13','动画教程','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_aix('p1i1','p0i0',[0,'多媒教程','','',-1,-1,0,'Article_Class2.asp?ClassID=14','_self','Article_Class2.asp?ClassID=14','多媒教程','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_aix('p1i2','p0i0',[0,'二维三维','','',-1,-1,0,'Article_Class.asp?ClassID=19','_self','Article_Class.asp?ClassID=19','多媒教程','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_ep();
stm_aix('p0i2','p0i0',[0,'|','','',-1,-1,0,'','_self','','','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#cccccc',1,'','',3,3,0,0,'#fffff7','#000000','#000000','#000000','9pt 宋体','9pt 宋体',0,0]);
stm_aix('p0i6','p0i0',[0,'计算机技术','','',-1,-1,0,'Article_Class2.asp?ClassID=4','_self','Article_Class2.asp?ClassID=4','计算机技术','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#cccccc',1,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体','9pt 宋体']);
stm_bp('p1',[1,4,0,0,2,3,6,7,100,'progid:DXImageTransform.Microsoft.Fade(overlap=.5,enabled=0,Duration=0.43)',-2,'',-2,67,2,3,'#999999','#ffffff','',3,1,1,'#aca899']);
stm_aix('p1i0','p0i0',[0,'IT信息','','',-1,-1,0,'Article_Class2.asp?ClassID=15','_self','Article_Class2.asp?ClassID=15','IT信息','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_aix('p1i1','p0i0',[0,'网络应用','','',-1,-1,0,'Article_Class2.asp?ClassID=16','_self','Article_Class2.asp?ClassID=16','网络应用','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_aix('p1i2','p0i0',[0,'技术应用','','',-1,-1,0,'Article_Class2.asp?ClassID=17','_self','Article_Class2.asp?ClassID=17','技术应用','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_aix('p1i3','p0i0',[0,'安全防御','','',-1,-1,0,'Article_Class2.asp?ClassID=18','_self','Article_Class2.asp?ClassID=18','安全防御','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#eeeeee',0,'','',3,3,0,0,'#fffff7','#ff0000','#666666','#FF6600','9pt 宋体']);
stm_ep();
stm_aix('p0i2','p0i0',[0,'|','','',-1,-1,0,'','_self','','','','',0,0,0,'','',0,0,0,0,1,'#f1f2ee',1,'#cccccc',1,'','',3,3,0,0,'#fffff7','#000000','#000000','#000000','9pt 宋体','9pt 宋体',0,0]);
stm_em();
//-->
</script>
</td>
<td width="11" bgcolor="#eeeeee"> </td>
</tr>
<tr bgcolor="#CCCCCC">
<td height="3" colspan="3"></td>
</tr>
<tr>
<td height="22" align="right"><img src="image/tp009.gif" width="15" height="15"></td>
<td>
<font color='#666666'> 您现在的位置: </font><a href='http://www.dongcn.com/love/'>动感中国</a> >> <a href='Article_Index.asp'>动感教程</a> >> <a href='Article_Class2.asp?ClassID=2&LayoutID=1'>网页设计</a> >> <a href='Article_Class2.asp?ClassID=10'><font color='#FF6600'>网络编程</font></a> >> 正文
</td>
<td> </td>
</tr>
</table>
<a name="#top"></a>
<table width="778" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="593" valign="top">
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="9%" background="adskin/homedhbg.gif"><img src="adskin/homedha2.gif" width="55" height="34"></td>
<td width="64%" height="34" background="adskin/homedhbg.gif"> <img src="Images/arrow.gif" width="11" height="14" align="absmiddle">
<font color="#666666" size="2"><strong>ASP & ASP.NET 网站性能设计之Cache动态使用</strong></font>
</td>
<td width="27%" align="center" background="adskin/homedhbg.gif">
<font color=#0066FF>顶</font> <font color=#FF0066>热</font> <font color='#FF6600'></font>
</td>
</tr>
</table></td>
</tr>
<tr>
<td height="2" colspan="2" align="center" bgcolor="#eeeeee"></td>
</tr>
<tr>
<td height="22" colspan="2" align="center" bgcolor="#eeeeee">[
作者:佚名 转贴自:frontfree.net 点击数:742 更新时间:2004-8-23 文章录入:<a href='UserInfo.asp?UserID=92'>动感</a>
]</td>
</tr>
<tr>
<td colspan="2" bgcolor="#f6f6f6"><table width="100%" border="0" cellspacing="6" cellpadding="8" style="word-break:break-all">
<tr>
<script>var status0_6562='';
var curfontsize_6562=9;var curlineheight_6562=12;</script>
<td height="200" valign="top" bgcolor="#FFFFFF"><p align="right"><a style="CURSOR: hand; POSITION: relative" οnclick="if(curfontsize_6562>8){fontsize_6562.style.fontSize=(--curfontsize_6562)+"pt";fontsize_6562.style.lineHeight=(--curlineheight_6562)+"pt";}"><img src="images/nofollow.gif" border="0" width="15" height="15"><font color="#666666">减小字体</font></a>
<a style="CURSOR: hand; POSITION: relative" οnclick="if(curfontsize_6562<64){fontsize_6562.style.fontSize=(++curfontsize_6562)+"pt";fontsize_6562.style.lineHeight=(++curlineheight_6562)+"pt";}"><img src="images/plus.gif" border="0" width="15" height="15"><font color="#666666">增大字体</font></a></p>
<div id="fontsize_6562">
<script language="JavaScript" type="text/JavaScript" src="http://union.3721.com/ass/adv2_1.js?pid2=A_dongcnadm_73652"></script><br>
<TABLE height="100%" cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top width="100%">
<TABLE height="100%" cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR class=text vAlign=top>
<TD align=left>原创:<A href="http://frontfree.net/view/article_838.html#">周梦杰</A> </TD>
<TD class=text vAlign=top align=right>2004年2月21日 </TD></TR>
<TR class=text vAlign=top>
<TD align=left colSpan=2>下载文章的示例代码:<A href="http://frontfree.net/articles/pages/0000000838/demo.rar">demo.rar </A></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD class=arcontent colSpan=3 height=8611><BR>
<H3 class=tittle>目录</H3>
<DIR>
<LI><A href="http://frontfree.net/view/article_838.html#Abstract">摘要</A>
<LI><A href="http://frontfree.net/view/article_838.html#background">应用范围和背景</A>
<LI><A href="http://frontfree.net/view/article_838.html#Cache.asp">ASP中Cache动态使用</A>
<LI><A href="http://frontfree.net/view/article_838.html#walkthrough.asp">walkthrough</A>
<LI><A href="http://frontfree.net/view/article_838.html#Cache.net">ASP.NET中Cache动态使用</A>
<LI><A href="http://frontfree.net/view/article_838.html#AddMethod">Cache.Add Method Reference</A>
<LI><A href="http://frontfree.net/view/article_838.html#WorkTheory">Cache随数据库动态变化的最佳实现原理</A>
<LI><A href="http://frontfree.net/view/article_838.html#walkthrough.net">walkthrough</A>
<LI><A href="http://frontfree.net/view/article_838.html#Code">Code</A>
<LI><A href="http://frontfree.net/view/article_838.html#Conclusion">总结</A>
<LI><A href="http://frontfree.net/view/article_838.html#References">参考文献</A>
<LI><A href="http://frontfree.net/view/article_838.html#Author">作者简介</A> </LI></DIR>
<H3><A class=tittle name=Abstract>摘要</A> </H3>
<P>本文主要讲述如何利用Cache技术,来有效的提高网站性能。全文共涉及两个示例,一个是以ASP为基础介绍在ASP中使用Cache的方法;另一个则是以ASP.NET为基础,展示ASP.NET中使用Cache的新特性,特别值得一提的是Database dependencies技术,下面将逐步展开全文的讨论。</P>
<H3><A class=tittle name=background>应用范围和背景</A> </H3>
<P>本文适合的读者对象:</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD>熟悉Active Server Page </TD></TR>
<TR>
<TD>对.NET架构有一定的了解 </TD></TR>
<TR>
<TD>对ASP.NET有基础 </TD></TR>
<TR>
<TD>熟悉Visual Studio.NET使用 </TD></TR>
<TR>
<TD>有较强的代码阅读学习能力 </TD></TR>
<TR>
<TD>熟悉Microsoft SQL Server各种工具使用 </TD></TR></TBODY></TABLE>
<P>Applies to:
<TABLE cellSpacing=1 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD>Microsoft® ASP.NET </TD></TR>
<TR>
<TD>Microsoft® Active Server Page </TD></TR>
<TR>
<TD>Microsoft SQL Server™2000 </TD></TR></TBODY></TABLE>
<P>信息化的时代已经到来,网站如雨后春笋般越建越多。相应地,开发网站的人专业技术人员也很多。无论是开发有单独服务器或集群的大型网站,还是租用虚拟空间的企业网站,性能(performance)都是重要的技术指标,尤其是首页刷新速度。据统计,对于网站的最终使用者来说,倘若他在5秒之内没有刷新出首页,或者在10秒之内没有刷新出其他页面,多数访问者会产生焦虑感,并对网站的友好度下降。更严重地,若网站由于访问人数太多而导致的服务器瘫痪(这里不考虑DOS or DDOS问题)或出错,则访问者对网站会产生不好的印象。尤其是公司的形象网站或以盈利为目的商业网站,他们对网站性能和稳定性的要求更高。
<P>影响网站性能的因素很多(如虚拟空间或专线的传输速度等),对于开发人员来说,有很多技巧和最佳实现的方法来提高网站的访问速度,包括使用存储过程来提高数据查询效率等各种各种方法(本文不再一一叙述),当然最有效的还是通过合理使用Cache来极大地提高性能。
<H3><A class=tittle name=Cache.asp>ASP中Cache动态使用</A> </H3>
<P>ASP从发布至今已经7年了,使用ASP技术已经相当成熟,自从微软推出了ASP.NET之后就逐渐停止了对ASP版本的更新。但是由于有很多人仍然习惯使用ASP来开发网站,所以,再次我将以一个简单的例子来说明在ASP中如何使用Cache。 </P>
<P>简单的说使用Cache基本原理是,把经常需要且获得代价昂贵的数据在内存中持续保存一定时间,以供这些数据可以被直接地全局地访问。例如,有一些数据需要从数据库多个表中查询获得,且几乎每个页面都要调用这些数据。这种情况下的最佳实现就是将这部分数据Cache起来,在ASP中的简单实现就是将这些数据的最终表达形式(例如HTML流)封装在string中然后存入ASP内置对象Application中(本文主要讨论的是动态Cache,简单的ASP应用就省略)。这样做的好处是,在整个网站中可以全局调用这段HTML,而且Application是存在内存中,所以不用再去查询数据库,从而加快了响应时间并节省了服务器负荷。当然这是以消耗内存为代价的,是一个典型的以空间换时间的实例。 </P>
<P>使用这种方法虽然有很多好处,但是再遇到频繁变化的数据源(数据库)的时候,这种方法就可能不再适用,因为ASP Application对象有一个缺点,就是不能自动随数据源的变化而变化,或者控制刷新间隔。所以就需要开发人员编程来实现动态Cache。当然在程序设计的时候可以在所有进行改变数据源(数据库)操作时,就更新一次Appliction。从而使数据源(数据库)始终保持一致。这样做在编程上要考虑的问题会比较多,容易遗漏细节。所以除了特定情况我不推荐使用这种方法。 </P>
<P>我认为在ASP中最好的办法是用编程实现定时刷新Cache,也就是说给Application中储存的设一个过期时间。当然,在ASP中Application对象没有这样一个ExpireTime属性。这需要用程序实现。如本文的第一个示例。 </P>
<H3 class=tittle><A name=walkthrough.asp>walkthrough</A> </H3>
<P>准备工作:检查IIS是否安装且可用,检查SQL Server 2000是否安装且有默认的演示数据库NorthWind。</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD>在IIS中建立虚拟目录,并注意权限设置,允许Internet 匿名用户IUSR_<I>MACHINENAME</I>访问。 </TD></TR>
<TR>
<TD>检查SQL Server 2000 NorthWind 数据库的权限设置,允许Internet 匿名用户IUSR_<I>MACHINENAME</I>对categories表有读权限。 </TD></TR>
<TR>
<TD>在建立虚拟目录的地方创建三个空白的演示文件:default.asp;getcache.asp;conn.asp。default.asp为前台展示页面,getcache.asp为后台控制Cache的文件,conn.asp是保存连接字符串的文件。 </TD></TR>
<TR>
<TD>将后文所示代码复制到这三个文件上即可。 </TD></TR>
<TR>
<TD>在IIS里浏览default.asp,察看时候顺利加载select控件。在刷新几次即可看出效果。在30秒之内不会在从数据库中读取而是从Application读取数据。从执行效果过来看,第一次的刷新速度明显慢于后面的刷新速度。如果有条件可以用SQL Server 2000自带的监视数据库的工具“事件探察器”监视就会发现只在第一次执行页面的时候执行SQL查询。 </TD></TR></TBODY></TABLE>
<P>使用这种方法的基本原理是,首先定义一个Cache变量(同样是储存在Application对象中)储存上一次和数据源同步的时间。在每一次新的刷新中判断当前时间与Cache中存的时间的间隔是否大于预先设定好的过期时间,若Cache未过期则直接从Cache读取HTML流,若Cache过期则重新读取数据源并重新在Cache写入同步时间,从而使Cache与数据源保持同步。 </P>
<P>这种方法的使用很普及,但是并没有做到真正的即时同步。因为在ASP中数据源的变化很难或几乎不可能通知到ASP本身。这也是ASP方案和J2EE方案比较很略劣势的一方面。在Microsoft新一代建构.NET上却很好的实现了这种即时同步。下面的内容将重点介绍在ASP.NET中如何实现这种技术。 </P>
<H3><A class=tittle name=Cache.net>ASP.NET中Cache动态使用</A> </H3>
<P>我在使用ASP.NET的过程中发现在.NET Framework中有Cache对象用于专门管理的储存各种数据对象。这对以前在ASP中使用Application储存Cache的开发人员来说无疑是一大福音。Cache对象提供了很多优秀的特性,例如设置访问优先级策略,设置过期时间,在Cache过期时触发事件,自由管理Cache中的每一条记录等优点。但是本文我要重点讲述如何实现基于数据源改变事件触发Cache动态刷新的技巧。首先向讲述一下Cache.Add Method。 </P>
<H3><A class=tittle name=AddMethod>Cache.Add Method Reference</A> </H3>
<P>详情请见MSDN中<A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebcachingcacheclassaddtopic.asp">Cache.Add Method</A>。我再稍作一些解释
<TABLE class=code cellSpacing=1 cellPadding=5 bgColor=#e0e0e0 border=0>
<TBODY>
<TR>
<TD><FONT color=#000000>[C#]<BR></FONT><FONT color=#000000><FONT color=#0000ff>public</FONT> object Add(<BR> <FONT color=#0000ff>string</FONT> <I>key</I>,<BR> <FONT color=#0000ff>object</FONT> <I>value</I><B>,</B><BR> CacheDependency <I>dependencies</I><B>,</B><BR> <FONT color=#0000ff>DateTime</FONT> <I>absoluteExpiration</I><B>,</B><BR> <FONT color=#0000ff>TimeSpan</FONT> <I>slidingExpiration</I><B>,</B><BR> CacheItemPriority <I>priority</I><B>,</B><BR> CacheItemRemoved Callback<I>onRemoveCallback</I><BR><B>);</B><BR></FONT></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=1 cellPadding=5 width="100%" bgColor=#000000 border=0>
<TBODY>
<TR bgColor=#ffffff>
<TD bgColor=#e0e0e0><I>key</I></TD>
<TD>用于检索Cache中对应的值 </TD></TR>
<TR bgColor=#ffffff>
<TD bgColor=#e0e0e0><I>value</I></TD>
<TD>将要在Cache中储存的对象 </TD></TR>
<TR bgColor=#ffffff>
<TD bgColor=#e0e0e0><I>dependencies</I></TD>
<TD>可以指定一个关联的文件或关联到一个其他Cache上,当这个文件或关联的Cache改变时,这个Cache就失效 </TD></TR>
<TR bgColor=#ffffff>
<TD bgColor=#e0e0e0><I>absoluteExpiration</I></TD>
<TD>指定绝对过期时间 </TD></TR>
<TR bgColor=#ffffff>
<TD bgColor=#e0e0e0><I>slidingExpiration</I></TD>
<TD>指定一个过期时间段 </TD></TR>
<TR bgColor=#ffffff>
<TD bgColor=#e0e0e0><I>priority</I></TD>
<TD>指定Cache的优先级 </TD></TR>
<TR bgColor=#ffffff>
<TD bgColor=#e0e0e0><I>CallbackonRemoveCallback</I> </TD>
<TD>当这个Cache过期时,执行指定的委托函数 </TD></TR></TBODY></TABLE>
<H3 class=tittle><A name=WorkTheory>Cache随数据库动态变化的最佳实现原理</A> </H3>
<P>至此,我们的最终目标已经很明确了。就是利用.NET Framework中提供的对象和方法实现Cache与数据源保持即时同步。突破点就是Cache.Add方法中的dependencies参数和CallbackonRemoveCallback参数,上文所述可以把一个Cache关联到一个文件或另一个Cache上。这样的话如果文件或另一个Cache改变时这个Cache就失效,然后就可以触发CallbackonRemoveCallback参数中指定的委托函数来重新刷新Cache。 </P>
<P>所以对于数据源是文件系统的文件时,例如:XML文件等,就可以直接将dependencies指定成XML文件实际的物理路径。如下示例代码所示: </P>
<TABLE class=code cellSpacing=1 cellPadding=5 bgColor=#e0e0e0 border=0>
<TBODY>
<TR>
<TD>
<P><SPAN class=blue><FONT color=#0000ff>static</FONT></SPAN> Cache _cache = <SPAN class=common>null</SPAN>; <SPAN class=green><FONT color=#006600>//声明全局Cache变量_cache</FONT></SPAN><BR><BR><FONT color=#0000ff>void</FONT> Application_Start (){ <BR> _cache = Context.Cache;<SPAN class=green> <FONT color=#006600>//将ASP.NET环境上下文中的Cache对象给_cache</FONT></SPAN><BR> RefreshCache (<SPAN class=common>null, null, </SPAN>0); <BR>}<BR><BR><SPAN class=blue><FONT color=#0000ff>static</FONT> void</SPAN> RefreshCache (string key, object item,CacheItemRemovedReason reason){<BR> <FONT color=#0000ff>string</FONT> strHTML; <BR> strHTML = ReadSomeDataFromXML();<SPAN class=green><FONT color=#006600>//做一些处理,如从XML文件读出数据等</FONT></SPAN><BR> _cache.Add(<BR><EM> <SPAN class=liangfen> "HTML1"</SPAN></EM>,<SPAN class=green><FONT color=#006600>//key</FONT></SPAN><BR><EM> strHTML</EM>,<SPAN class=green>//存入Cache中的value</SPAN><BR><SPAN class=blue> <EM> new </EM></SPAN><EM>CacheDependency (<SPAN class=liangfen>"C://CacheDependency//DataSource.xml"</SPAN>)</EM>,<SPAN class=green><FONT color=#006600>//指定关联的文件</FONT></SPAN><BR> <EM> Cache.NoAbsoluteExpiration</EM>,<BR> <EM> Cache.NoSlidingExpiration</EM>,<BR> <EM> CacheItemPriority.Default</EM>,<BR> <SPAN class=green> </SPAN> <SPAN class=blue><EM>new </EM></SPAN><EM>CacheItemRemovedCallback (RefreshCache)</EM><SPAN class=green><FONT color=#006600>//当Cache失效时重新刷新</FONT></SPAN><BR> );<BR>}<B><BR></B></P></TD></TR></TBODY></TABLE>
<P>但是多数数据源不是文件,而是数据数据库。若数据库改变时,或数据库某些表改变时,这种方法就不适用。既然文件可以和Cache做关联,这样我们就要想办法让数据库和某一个文件上关联,当数据库某些表改变时就能触发文件改变,从而使Cache重新刷新。按照这个思路,就不难想到SQl Server数据库系统的两种并不常用的技术:
<TABLE cellSpacing=1 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD>触发器 triggers </TD></TR>
<TR>
<TD>扩展存储过程 Extended Stored Procedures</TD></TR></TBODY></TABLE>
<P><IMG style="MARGIN-LEFT: 20px" src="UploadFiles/200482316559734.gif">
<P>原理如上图所示:
<TABLE cellSpacing=1 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD>当数据库表中数据改变时(Update;Delete;Insert)将触动触发条件,触发器执行扩展存储过程。 </TD></TR>
<TR>
<TD>扩展存储过程调用的是预先编译好的COM+组件。 </TD></TR>
<TR>
<TD>这个COM+组件的功能是打开一个文件,然后再关闭这个文件,这样导致这个文件AT(access time)发生改变。 </TD></TR>
<TR>
<TD>由于Cache和这个文件时Dependency关系,所以文件发生改变时,将导致Cache无效。</TD></TR>
<TR>
<TD>正如上文所说,Cache无效时会触发委托函数,从而使Cache重新从数据库中读取数据。</TD></TR></TBODY></TABLE>
<H3><A class=tittle name=walkthrough.net>walkthrough</A> </H3>
<P>由于这个示例不光包含代码,还涉及比较复杂的部署和系统调用,所以我将一步一步地详细说明。
<TABLE cellSpacing=1 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD>在IIS中建立虚拟目录,假设实际目录是"C:/CacheDemo",虚拟目录是"CacheDemo".并注意权限设置,允许Internet 匿名用户IUSR_<I>MACHINENAME</I>访问。 </TD></TR>
<TR>
<TD>检查SQL Server 2000 NorthWind 数据库的权限设置,允许Internet 匿名用户IUSR_<I>MACHINENAME</I>对categories表有读权限。 </TD></TR>
<TR>
<TD>在建立虚拟目录的地方创建两个空白的演示文件:CacheDB.aspx;Global.asax; </TD></TR>
<TR>
<TD>将后文所示代码复制到相应文件,并复查连接字符串是否正确。 </TD></TR>
<TR>
<TD>制作扩展存储过程COM+组件。打开Visual Studio.NET </TD></TR>
<TR>
<TD>创建C++新工程,选Visual C++ projects -〉general 文件树中的Extended Stored Procedures DLL。</TD></TR></TBODY></TABLE>
<P><IMG src="UploadFiles/200482316559580.gif">
<P>下一步指定扩展存储过程的名字是"xp_changefileAT"。
<TABLE cellSpacing=1 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD>复制后文的xp_changefileAT代码到proc.cpp文件的xp_changefileAT的函数中。(覆盖函数中原来的代码)。其他文件保持不变。用Release模式编译程序。 </TD></TR>
<TR>
<TD>将ChangeFileAT.dll拷贝到你的SQL Server MSSQL/Binn 目录下。 </TD></TR>
<TR>
<TD>打开SQL Server 2000 Query Analyzer。选择Master数据库,执行sp_addextendedproc 'xp_changefileAT', 'ChangeFileAT.DLL'语句。sp_addextendedproc是用来加载扩展存储过程的内置存储过程。 </TD></TR>
<TR>
<TD>为NorthWind数据库的Categories添加触发器。在Query Analyzer 中选择NorthWind数据库,执行后文的addtrigger.sql。 </TD></TR>
<TR>
<TD>配置数据库,打开SQL Server 2000 Enterprise Manager,复查各种权限设置。 </TD></TR>
<TR>
<TD>在C:/CacheDemo中创建空白文件,文件名:Dependence(无扩展名),并配置权限,允许SQL Server有修改权限,默认情况不用额外配置。 </TD></TR>
<TR>
<TD>现在部署和配置完成。在IIS中浏览CacheDB.aspx是否看到预期的效果。如图 :</TD></TR></TBODY></TABLE>
<P><IMG src="UploadFiles/200482316559621.gif" border=1>
<TABLE cellSpacing=1 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD>若没有出现正确的网页,则复查上述每一步,并深刻理解原理图。若出现上图的效果则说明配置正确。 </TD></TR>
<TR>
<TD>打开SQL Server 2000 profiler。监视刷新页面时是否读取数据库。由于数据是从Cache中读取的,所以profiler不应该有任何响应。这说明Cache生效了。 </TD></TR>
<TR>
<TD>在SQL Server 2000 Enterprise Manager 中将Categories表中的"Beverages"改成"abcd"。 </TD></TR>
<TR>
<TD>再次刷新页面,看看是否自动刷新了Cache。如图:</TD></TR>
<TR>
<TD>在刷新几次页面,看看profiler是否有响应。由于数据是从更新过的Cache中读取的,所以profiler不应该有任何响应。这说明Cache更新生效。</TD></TR></TBODY></TABLE>
<P><IMG src="UploadFiles/200482316559360.gif" border=1>
<H3 class=tittle><A name=Conclusion>总结</A></H3>
<P>至此,本文最重要且最复杂的示例就讲完了。也许大家现在有一个疑问,就是为什么要依靠这么复杂的部署和设置才能达到这样效果,.NET没有提供现成的类来支持数据库和Cache同步吗?对于这个问题,我也困扰了好久。对于这个原因我个人也有一些推断,微软推出.NET战略是为了将J2EE击败,无论是从语言的先进性还是开发的方便性尤其是广大开发人员和客户所关心的执行效率问题上。.NET都力求胜人一筹。.NET Framework Cache 对象为什么选定文件系统来做Dependence对象,成为数据库和Cache的纽带,而不是全局的共享内存,其原因我也问过司徒彦南。他的解释是出于安全性和效率的考虑。</P>
<P>大家知道若依靠全局的共享内存来做不同进程之间的纽带,这种方法是不安全的,必须要处处小心,无论是读取还是写入都必须加锁,也就是说要访问一次共享内存需要Lock一次在UnLock一次,在读取的时候同样也需要Lock,这样频繁的锁操作是降低系统性能的,严重的还会产生死锁现象。<BR>用文件系统做纽带的好处是,当文间被改的时候其实并不是实际去读写硬盘,而是利用操作系统的磁盘缓存特性,将操作转到内存中。而且通过更改32位整型的AT(access time)来表示是否修改过文件,这样的好处是在任何一个大于32位的操作系统中,对32位整型来说无论是读取还是修改都原子操作。从而达到无锁同步的目的。</P>
<P>综上所述,用这种方法充分的利用了操作系统,SQL Server 2000 和.NET的特性,在实现数据库和Cache同步做到了最佳实现。非常值得学习借鉴。 </P>
<H3><A class=tittle name=Code>Code</A> </H3>
<UL>
<LI><SPAN class=ltittle>ASP:default.asp </SPAN><BR><BR>
<TABLE class=code cellSpacing=1 cellPadding=5 bgColor=#e0e0e0 border=0>
<TBODY>
<TR>
<TD><SPAN class=anred><%@Language=VBScript%><BR><%</SPAN><SPAN class=blue>Option Explicit</SPAN><SPAN class=anred>%><BR><%Response.Buffer=</SPAN><SPAN class=blue>True</SPAN><SPAN class=anred>%></SPAN><BR><SPAN class=green><!--#include file = "conn.asp"--><BR><!--#include file = "GetCache.asp"--></SPAN><BR><SPAN class=blue><HTML><BR> <HEAD></SPAN><BR> <SPAN class=blue> <TITLE></SPAN>ASP Cache演示<SPAN class=blue></TITLE><BR> <META </SPAN><SPAN class=red>HTTP-EQUIV</SPAN><SPAN class=blue>=</SPAN><SPAN class=liangfen>"Content-Type"</SPAN> <SPAN class=red>CONTENT</SPAN><SPAN class=blue>=</SPAN><SPAN class=liangfen>"text/html; charset=gb2312"</SPAN><SPAN class=blue>><BR> </HEAD><BR> <BODY></SPAN><BR> <SPAN class=blue> <h4></SPAN>每隔10秒刷新Cache<SPAN class=common>:</SPAN><SPAN class=blue></h4></SPAN><BR><SPAN class=anred> <%<BR> response.Flush<BR> GetHTMLStream<BR> response.Write<BR> HTMLStream<BR> %></SPAN><BR><SPAN class=blue> </body><BR></html> </SPAN></TD></TR></TBODY></TABLE><SPAN class=ltittle>
<P></P></SPAN>
<LI><SPAN class=ltittle>ASP:getcache.asp </SPAN><BR><BR>
<TABLE class=code id=Table1 cellSpacing=1 cellPadding=5 bgColor=#e0e0e0 border=0>
<TBODY>
<TR>
<TD><SPAN class=anred><% <BR></SPAN><SPAN class=blue>Const</SPAN><SPAN class=anred> CACHE_DEFAULT_INTERVAL = 30</SPAN><SPAN class=green> '每隔30秒刷新一次cache </SPAN><SPAN class=anred><BR></SPAN><SPAN class=blue>Dim </SPAN><SPAN class=anred>HTMLStream <BR></SPAN><SPAN class=blue>Dim </SPAN><SPAN class=anred>IsExpires <BR>IsExpires = CacheExpires <BR></SPAN><SPAN class=blue>Function </SPAN><SPAN class=anred>CacheExpires <BR> </SPAN><SPAN class=blue>Dim </SPAN><SPAN class=anred>strLastUpdate <BR></SPAN><SPAN class=blue> Dim</SPAN><SPAN class=anred> result strLastUpdate = Application(</SPAN><SPAN class=liangfen>"LastUpdate"</SPAN><SPAN class=anred>) <BR> </SPAN><SPAN class=blue> If</SPAN><SPAN class=anred> (strLastUpdate =</SPAN> <SPAN class=liangfen>""</SPAN><SPAN class=anred>) </SPAN><SPAN class=blue>Or</SPAN><SPAN class=anred> (CACHE_DEFAULT_INTERVAL < </SPAN><SPAN class=red>DateDiff</SPAN><SPAN class=anred>(</SPAN><SPAN class=liangfen>"s"</SPAN><SPAN class=anred>, strLastUpdate, </SPAN><SPAN class=red>Now</SPAN><SPAN class=anred>)) </SPAN><SPAN class=blue>Then </SPAN><SPAN class=anred><BR> result = </SPAN><SPAN class=blue>true </SPAN><SPAN class=anred><BR> SetLastUpdateTime <BR></SPAN><SPAN class=blue> Else </SPAN><SPAN class=anred><BR> result = </SPAN><SPAN class=blue>false </SPAN><SPAN class=anred><BR></SPAN><SPAN class=blue> End If </SPAN><SPAN class=anred><BR> CacheExpires = result <BR></SPAN><SPAN class=blue>End Function </SPAN><SPAN class=anred><BR><BR></SPAN><SPAN class=blue>Sub </SPAN><SPAN class=anred>SetLastUpdateTime <BR> Application.Lock <BR> Application(</SPAN><SPAN class=liangfen>"LastUpdate"</SPAN><SPAN class=anred>) =</SPAN><SPAN class=red> CStr</SPAN><SPAN class=anred>(</SPAN><SPAN class=red>now</SPAN><SPAN class=anred>()) <BR> Application.UnLock <BR></SPAN><SPAN class=blue>End Sub </SPAN><SPAN class=anred><BR><BR></SPAN><SPAN class=blue>Sub</SPAN><SPAN class=anred> GetHTMLStream <BR> If IsExpires Then <BR> UpdateHTMLStream <BR> End If <BR> HTMLStream=Application(</SPAN><SPAN class=liangfen>"CACHE_HTMLStream"</SPAN><SPAN class=anred>) <BR></SPAN><SPAN class=blue>End Sub <BR><BR>Sub</SPAN><SPAN class=anred> UpdateHTMLStream <BR> </SPAN><SPAN class=blue> dim</SPAN><SPAN class=anred> d <BR> d = FetchHTMLStream <BR> Application.Lock <BR> Application(</SPAN><SPAN class=liangfen>"CACHE_HTMLStream"</SPAN><SPAN class=anred>) = d <BR> Application.UnLock <BR></SPAN><SPAN class=blue>End Sub </SPAN><SPAN class=anred><BR></SPAN><SPAN class=blue><BR>Function</SPAN><SPAN class=anred> FetchHTMLStream <BR> </SPAN><SPAN class=blue> Dim</SPAN><SPAN class=anred> rs ,strSQL, strHTML </SPAN><BR><SPAN class=blue> Set</SPAN><SPAN class=anred> rs =</SPAN><SPAN class=red> CreateObject</SPAN><SPAN class=anred>(</SPAN><SPAN class=liangfen>"ADODB.Recordset"</SPAN><SPAN class=anred>) </SPAN><BR><SPAN class=anred> strSQL = </SPAN><SPAN class=liangfen>"select categoryID , categoryname from categories" </SPAN><BR><SPAN class=anred> rs.Open strSQL, strConn,adOpenForwardOnly,adLockReadOnly </SPAN><BR><SPAN class=anred> strHTML = strHTML &</SPAN><SPAN class=liangfen> "<select name=""slt_search"">" </SPAN><BR><SPAN class=blue> while</SPAN> <SPAN class=anred>(</SPAN><SPAN class=blue>not</SPAN> <SPAN class=anred>rs.EOF) </SPAN><BR><SPAN class=anred> strHTML = strHTML & </SPAN><SPAN class=liangfen>"<option>" </SPAN><SPAN class=anred><BR> strHTML = strHTML & rs.Fields</SPAN><SPAN class=liangfen>("categoryname") </SPAN><SPAN class=anred><BR> strHTML = strHTML &</SPAN> <SPAN class=liangfen>"</option>"</SPAN><SPAN class=anred> rs.MoveNext </SPAN><BR> <SPAN class=blue> wend </SPAN><BR><SPAN class=anred> strHTML = strHTML & </SPAN><SPAN class=liangfen>"</select>" </SPAN><SPAN class=anred><BR> rs.Close </SPAN><BR><SPAN class=blue> Set </SPAN><SPAN class=anred>rs =</SPAN><SPAN class=blue> Nothing </SPAN><BR> <SPAN class=anred> FetchHTMLStream = strHTML </SPAN><BR><SPAN class=blue>End Function </SPAN><BR><SPAN class=anred>%> </SPAN></TD></TR></TBODY></TABLE>
<P></P>
<LI><SPAN class=ltittle>ASP:conn.asp </SPAN><BR><BR>
<TABLE class=code id=Table2 cellSpacing=1 cellPadding=5 bgColor=#e0e0e0 border=0>
<TBODY>
<TR>
<TD><SPAN class=green><!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"--> </SPAN><BR><SPAN class=anred><% <BR> dim strConn <BR> strConn =</SPAN> <SPAN class=liangfen>"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind" <BR>%> </SPAN></TD></TR></TBODY></TABLE>
<P></P>
<LI><SPAN class=ltittle>C++ Extended Stored Procedures Dll:proc.cpp<BR></SPAN><BR>
<TABLE class=code id=Table3 cellSpacing=1 cellPadding=5 bgColor=#e0e0e0 border=0>
<TBODY>
<TR>
<TD>RETCODE __declspec(dllexport) xp_changefileAT(SRV_PROC *srvproc) { <BR><SPAN class=green> // <BR> // Make sure an input parameter is present. <BR> // </SPAN><BR><SPAN class=blue> if </SPAN>(srv_rpcparams (srvproc) == 0) <BR> <SPAN class=blue> return </SPAN>-1; <BR><SPAN class=green> // <BR> // Extract the file name from the input parameter. <BR> // BYTE bType; </SPAN><BR><SPAN class=blue> char</SPAN> file[256]; <BR> ULONG ulMaxLen = <SPAN class=blue>sizeof </SPAN>(file); <BR> ULONG ulActualLen; <BR> BOOL fNull; <BR> <SPAN class=blue> if</SPAN> (srv_paraminfo (srvproc, 1, &bType, &ulMaxLen, &ulActualLen, (BYTE*) file, &fNull) == FAIL) <BR> <SPAN class=blue> return</SPAN> -1; <BR> <SPAN class=blue> if</SPAN> (bType != SRVBIGCHAR && bType != SRVBIGVARCHAR) <BR> <SPAN class=blue> return </SPAN>-1; file[ulActualLen] = 0; <BR><SPAN class=green> // <BR> // Update the file's time stamp. <BR> // </SPAN><BR><SPAN class=blue> char </SPAN>path[288] =<SPAN class=liangfen> "C://CacheDemo//"</SPAN>; <BR> lstrcat (path, file); <BR> HANDLE hFile = CreateFile (path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); <BR><SPAN class=blue> if</SPAN> (hFile != INVALID_HANDLE_VALUE) <BR> CloseHandle (hFile); <BR><SPAN class=blue> return</SPAN> 0; <BR>} </TD></TR></TBODY></TABLE>
<P></P>
<LI><SPAN class=ltittle>SQL Server:Addtrigger.sql</SPAN><BR><BR>
<TABLE class=code id=Table4 cellSpacing=1 cellPadding=5 bgColor=#e0e0e0 border=0>
<TBODY>
<TR>
<TD width=393>CREATE TRIGGER DataChanged ON [dbo].[Categories] <BR>FOR INSERT, UPDATE, DELETE <BR>AS <BR>EXEC master..xp_changefileAT <SPAN class=liangfen>'Dependence'</SPAN>; </TD></TR></TBODY></TABLE>
<P></P>
<LI><SPAN class=ltittle>ASP.NET:CacheDB.aspx</SPAN><BR><BR>
<TABLE class=code id=Table5 cellSpacing=1 cellPadding=5 bgColor=#e0e0e0 border=0>
<TBODY>
<TR>
<TD><SPAN class=anred><%@ Import Namespace=</SPAN><SPAN class=liangfen>"System.Data"</SPAN><SPAN class=anred> %><BR></SPAN><SPAN class=blue><html><BR> <body> </SPAN><SPAN class=anred><BR> </SPAN><SPAN class=blue><</SPAN><SPAN class=common>asp:</SPAN><SPAN class=red>Label ID</SPAN><SPAN class=blue>=</SPAN><SPAN class=liangfen>"Author"</SPAN><SPAN class=red> RunAt</SPAN><SPAN class=blue>=</SPAN><SPAN class=liangfen>"server"</SPAN><SPAN class=anred> </SPAN><SPAN class=common>/</SPAN><SPAN class=blue>> </SPAN><SPAN class=anred><BR></SPAN><SPAN class=blue> </body> <BR></html> </SPAN><SPAN class=anred><BR></SPAN><SPAN class=blue><script</SPAN><SPAN class=anred> </SPAN><SPAN class=red>language</SPAN><SPAN class=blue>=</SPAN><SPAN class=liangfen>"C#"</SPAN><SPAN class=anred> </SPAN><SPAN class=red>runat</SPAN><SPAN class=blue>=</SPAN><SPAN class=liangfen>"server"</SPAN><SPAN class=blue>> <BR>void</SPAN><SPAN class=anred> Page_Load (Object sender, EventArgs e) { <BR> string strHTML = (string) Cache[</SPAN><SPAN class=liangfen>"Quotes"</SPAN><SPAN class=anred>]; <BR> </SPAN><SPAN class=blue> if </SPAN><SPAN class=anred>(strHTML != </SPAN><SPAN class=blue>null</SPAN><SPAN class=anred>) { <BR> Author.</SPAN><SPAN class=red>Text</SPAN><SPAN class=anred> = strHTML; <BR> } <BR> </SPAN><SPAN class=blue> else</SPAN><SPAN class=anred> { <BR> Author.</SPAN><SPAN class=red>Text</SPAN><SPAN class=anred> =</SPAN> <SPAN class=liangfen>"Server busy"</SPAN><SPAN class=anred>; <BR> } <BR>} </SPAN><SPAN class=blue></script> </SPAN></TD></TR></TBODY></TABLE>
<P></P>
<LI><SPAN class=ltittle>ASP.NET:Global.asax</SPAN><BR><BR>
<TABLE class=code id=Table6 cellSpacing=1 cellPadding=5 bgColor=#e0e0e0 border=0>
<TBODY>
<TR>
<TD><SPAN class=anred><%@ Import NameSpace=</SPAN><SPAN class=liangfen>"System.Data"</SPAN><SPAN class=anred> %> <BR><%@ Import NameSpace=</SPAN><SPAN class=liangfen>"System.Data.SqlClient"</SPAN><SPAN class=anred> %> </SPAN><BR><SPAN class=blue><script </SPAN><SPAN class=red>language</SPAN><SPAN class=blue>=</SPAN><SPAN class=liangfen>"C#"</SPAN><SPAN class=red> runat</SPAN><SPAN class=blue>=</SPAN><SPAN class=liangfen>"server"</SPAN><SPAN class=blue>> </SPAN><BR><SPAN class=blue>static</SPAN> Cache _cache = null; <BR><SPAN class=blue>void</SPAN> Application_Start () <BR>{ <BR> _cache = Context.Cache; <BR> RefreshCache (null, null, 0); <BR>} <BR><SPAN class=blue>static void</SPAN> RefreshCache (string key, object item,CacheItemRemovedReason reason) <BR>{ <BR> string mySelectQuery =<SPAN class=liangfen> "SELECT CategoryName FROM Categories"</SPAN>; <BR> SqlConnection myConnection = <SPAN class=blue>new </SPAN>SqlConnection(<SPAN class=liangfen>"workstation id=localhost;</SPAN><BR> packet size=4096;integrated <BR> security=SSPI;data source=(local);<BR> persist security info=False;<BR> initial catalog=Northwind<SPAN class=liangfen>");</SPAN> <BR> SqlCommand myCommand = <SPAN class=blue>new</SPAN> SqlCommand(mySelectQuery,myConnection); <BR> myConnection.Open(); <BR> SqlDataReader myReader = myCommand.ExecuteReader(); <BR> StringBuilder sb = <SPAN class=blue>new </SPAN>StringBuilder(); <BR> <SPAN class=blue> try </SPAN><BR> { <BR> sb.Append(<SPAN class=liangfen>"<select>"</SPAN>); <BR> while (myReader.Read()) <BR> { <BR> sb.Append(<SPAN class=liangfen>"<option>"</SPAN>); <BR> sb.Append(myReader.GetString(0)); <BR> sb.Append(<SPAN class=liangfen>"</option>"</SPAN>); <BR> } <BR> sb.Append(<SPAN class=liangfen>"</select>"</SPAN>); <BR> } <BR> finally <BR> { <BR> myReader.Close(); <BR> myConnection.Close(); <BR> } <BR> _cache.Insert ( <SPAN class=liangfen>"Quotes"</SPAN>, <BR> sb.ToString(), <BR> <SPAN class=blue>new</SPAN> CacheDependency (<SPAN class=liangfen>"C://CacheDemo//Dependence"</SPAN>), <BR> Cache.NoAbsoluteExpiration, <BR> Cache.NoSlidingExpiration, <BR> CacheItemPriority.Default, <BR> <SPAN class=blue>new</SPAN> CacheItemRemovedCallback (RefreshCache) <BR> ); <BR>} <BR><SPAN class=blue></script> </SPAN></TD></TR></TBODY></TABLE></LI></UL>
<H3><A name=References>参考文献</A></H3>
<TABLE cellSpacing=1 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD width="4%">[1] </TD>
<TD width="96%">MSDN Supporting Database Cache Dependencies in ASP.NET <STRONG>Jeff Prosise</STRONG> </TD></TR>
<TR>
<TD>[2] </TD>
<TD>MSDN 25+ ASP Tips to Improve Performance and Style <STRONG>Len Cardinal</STRONG> </TD></TR>
<TR>
<TD>[3]</TD>
<TD>Worx Professional ASP.NET Performance <STRONG>K.Scott Allen</STRONG> </TD></TR></TBODY></TABLE>
<P><B><A name=Author>作者简介</A> </B></P>
<P>周梦杰,北京工业大学计算机学院2000级学生,2003年全国微软创新杯程序设计大赛三等奖。目前担任放飞项目工作室主管。您可以通过电子邮件 <A href="mailto:try@frontfree.net">try@frontfree.net</A> 与他联系 。</P>
<P><B>版权声明</B> </P>
<P>本文版权归原作者和放飞技术网共同所有,转载本文必须注明作者和出处:<A href="http://www.frontfree.net/">放飞技术网</A>。</P></TD></TR></TBODY></TABLE>
</div></td>
</tr>
</table></td>
</tr>
<tr>
<td colspan="2" bgcolor="#f6f6f6"><table width="100%" height="50" border="0" cellpadding="0" cellspacing="5" style="BORDER-top: #51637B 1px solid;BORDER-bottom: #51637B 1px solid;">
<tr>
<td bgcolor="#FFFFFF"> <img src="adskin/aer.gif"> 上一篇文章:
<a href='Article_Show.asp?ArticleID=533' title='文章标题:如何把ASP编写成DLL
作 者:佚名
更新时间:2004-8-20 16:36:32
点击次数:133'>如何把ASP编写成DLL</a>
<br> <img src="adskin/aer.gif"> 下一篇文章:
<a href='Article_Show.asp?ArticleID=538' title='文章标题:结构与类
作 者:佚名
更新时间:2004-8-23 16:58:49
点击次数:59'>结构与类</a>
</td>
</tr>
</table></td>
</tr>
<tr align="right">
<td height="20" colspan="2">【<a href="Article_Comment.asp?ArticleID=536" target="_blank">发表评论</a>】【<a href="SendMail.asp?ArticleID=536" target="_blank">告诉好友</a>】【<a href="Article_Print.asp?ArticleID=536">打印此文</a>】【<a href="javascript:window.close();">关闭窗口</a>】</td>
</tr>
</table>
</td>
<td width="185" valign="top" bgcolor="#f6f6f6" style="border-left:1px #D8D8D8 solid;"><table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="34" background="adskin/homedhbg.gif"><img src="adskin/znss.gif"></td>
</tr>
</table><table width="100%" border="0" cellpadding="0" cellspacing="5">
<tr>
<td height="100" align="center" valign="middle" bgcolor="#FFFFFF"> <form name="search" method="post" action="Article_search.asp">
<input name="Keyword" type="text" id="Keyword" value="关键字" size="18" maxlength="50">
<input name="Submit" type="submit" id="Submit" value="搜索">
<br>
<br>
<input name="Channel" type="radio" value="Article" style="border:0" checked onClick="javascript:document.search.action='Article_search.asp';document.search.Field.value='Title';">
技术文章
<input type="radio" name="Channel" value="Soft" style="border:0" onClick="javascript:document.search.action='soft_search.asp';document.search.Field.value='SoftName';">
资源下载<br>
<input type="radio" name="Channel" value="Photo" style="border:0" onClick="javascript:document.search.action='photo_search.asp';document.search.Field.value='PhotoName';">
经典素材
<input type="radio" name="Channel" value="bbs" style="border:0" onClick="javascript:document.search.action='bbs/queryresult.asp?sType=2&pSearch=1&SearchDate=ALL&Stable=bbs1&boardid=0';document.search.Field.value='Title';">
社区论坛<br>
<input name="Field" type="hidden" id="Field3" value="Title">
</form></td>
</tr>
</table><table width='100%' border='0'cellpadding='0' cellspacing='0'>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="34" background="adskin/homedhbg.gif"><img src="adskin/zxrm.gif"></td>
</tr>
</table></td>
<tr>
<td height="40" valign="top"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="5">
<tr>
<td valign="top">
<img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=610' title='文章标题:JAVA教师:给JAVA初学者
作 者:樊老师
更新时间:2004-12-28 15:17:29
点击次数:230' target='_blank'>JAVA教师:给JAVA初…</a><font color=#666666>[</font><font color=#FF0066>230</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=609' title='文章标题:使用JSP处理用户注册和登陆
作 者:佚名
更新时间:2004-12-28 14:12:56
点击次数:155' target='_blank'>使用JSP处理用户注…</a><font color=#666666>[</font><font color=#FF0066>155</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=608' title='文章标题:JSP自学笔记
作 者:佚名
更新时间:2004-12-28 14:10:20
点击次数:149' target='_blank'>JSP自学笔记</a><font color=#666666>[</font><font color=#FF0066>149</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=607' title='文章标题:数据库备份/恢复方案
作 者:佚名
更新时间:2004-12-28 13:51:43
点击次数:180' target='_blank'>数据库备份/恢复方…</a><font color=#666666>[</font><font color=#FF0066>180</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=606' title='文章标题:java swing 包第三天
作 者:佚名
更新时间:2004-12-28 13:50:12
点击次数:184' target='_blank'>java swing 包第三…</a><font color=#666666>[</font><font color=#FF0066>184</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=605' title='文章标题:java swing包第二天
作 者:佚名
更新时间:2004-12-28 13:49:36
点击次数:235' target='_blank'>java swing包第二天…</a><font color=#666666>[</font><font color=#FF0066>235</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=604' title='文章标题:java从头学----包部分(Swing包)(第一天)
作 者:佚名
更新时间:2004-12-28 13:49:13
点击次数:271' target='_blank'>java从头学----包部…</a><font color=#666666>[</font><font color=#FF0066>271</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=603' title='文章标题:网站项目实施业务流程及规范
作 者:佚名
更新时间:2004-12-28 13:48:21
点击次数:135' target='_blank'>网站项目实施业务流…</a><font color=#666666>[</font><font color=#FF0066>135</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=602' title='文章标题:JSP自定义标签试验(续)
作 者:佚名
更新时间:2004-12-28 13:27:30
点击次数:125' target='_blank'>JSP自定义标签试验…</a><font color=#666666>[</font><font color=#FF0066>125</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=601' title='文章标题:JSP自定义标签试验
作 者:佚名
更新时间:2004-12-28 13:26:41
点击次数:130' target='_blank'>JSP自定义标签试验…</a><font color=#666666>[</font><font color=#FF0066>130</font><font color=#666666>]</font><br>
</td>
</tr>
</table></td>
</tr>
<tr>
<td></td>
</tr>
</table>
<table width='100%' border='0'cellpadding='0' cellspacing='0'>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="34" background="adskin/homedhbg.gif"><img src="adskin/zxtja.gif"></td>
</tr>
</table></td>
<tr>
<td height="100" valign="top"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="5">
<tr>
<td valign="top">
<img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=588' title='文章标题:Java入门:浅谈DAO模式
作 者:佚名
更新时间:2004-12-1 11:30:42
点击次数:213' target='_blank'>Java入门:浅谈DAO…</a><font color=#666666>--[</font><font color=#FF0066>213</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=485' title='文章标题:如何用 photoshop 画云
作 者:佚名
更新时间:2004-7-23 15:20:27
点击次数:870' target='_blank'>如何用 photoshop…</a><font color=#666666>--[</font><font color=#FF0066>870</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=465' title='文章标题:三天学好ADO之第三天
作 者:byebye8742
更新时间:2004-7-13 16:44:34
点击次数:518' target='_blank'>三天学好ADO之第三…</a><font color=#666666>--[</font><font color=#FF0066>518</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=460' title='文章标题:ASP代码的对象化
作 者:doface
更新时间:2004-7-13 16:19:58
点击次数:461' target='_blank'>ASP代码的对象化</a><font color=#666666>--[</font><font color=#FF0066>461</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=459' title='文章标题:高手绝秘:打造自己的网络电台
作 者:佚名
更新时间:2004-7-8 15:27:59
点击次数:577' target='_blank'>高手绝秘:打造自…</a><font color=#666666>--[</font><font color=#FF0066>577</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=458' title='文章标题:绝对超强手绘:少女与小狗
作 者:佚名
更新时间:2004-7-8 15:26:33
点击次数:1241' target='_blank'>绝对超强手绘:少…</a><font color=#666666>--[</font><font color=#FF0066>1241</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=443' title='文章标题:3DS MAX粒子流实例:弹道效果
作 者:佚名
更新时间:2004-7-1 12:56:24
点击次数:854' target='_blank'>3DS MAX粒子流实例…</a><font color=#666666>--[</font><font color=#FF0066>854</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=436' title='文章标题:[评选]2003 中国十大IT风云人物排行榜
作 者:佚名
更新时间:2004-7-1 12:09:31
点击次数:312' target='_blank'>[评选]2003 中国十…</a><font color=#666666>--[</font><font color=#FF0066>312</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=427' title='文章标题:使用Fireworks制作红墙砖头效果
作 者:flashas
更新时间:2004-6-22 15:55:29
点击次数:323' target='_blank'>使用Fireworks制作…</a><font color=#666666>--[</font><font color=#FF0066>323</font><font color=#666666>]</font><br><img src=adskin/aer.gif border=0> <a href='Article_Show.asp?ArticleID=409' title='文章标题:SQL Server数据库检修
作 者:佚名
更新时间:2004-6-15 16:27:21
点击次数:427' target='_blank'>SQL Server数据库…</a><font color=#666666>--[</font><font color=#FF0066>427</font><font color=#666666>]</font><br>
</td>
</tr>
</table></td>
</tr>
<tr>
<td></td>
</tr>
</table><table width='100%' border='0'cellpadding='0' cellspacing='0'>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="34" background="adskin/homedhbg.gif"><img src="adskin/xgwz.gif"></td>
</tr>
</table></td>
<tr>
<td height="40" valign="top"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="5">
<tr>
<td valign="top">
<li><a href='Article_Show.asp?ArticleID=594' title='文章标题:整理了一些ASP初学者常用的代码
作 者:佚名
更新时间:2004-12-22 11:11:39
点击次数:74'>整理了一些ASP初学…</a>[<font color=red>74</font>]</li><br><li><a href='Article_Show.asp?ArticleID=593' title='文章标题:ASP与JSP的比较
作 者:佚名
更新时间:2004-12-22 11:11:09
点击次数:75'>ASP与JSP的比较</a>[<font color=red>75</font>]</li><br><li><a href='Article_Show.asp?ArticleID=585' title='文章标题:整理收藏: ASP 三十二条精华代码
作 者:Neeao
更新时间:2004-12-1 11:18:08
点击次数:63'>整理收藏: ASP 三十…</a>[<font color=red>63</font>]</li><br><li><a href='Article_Show.asp?ArticleID=573' title='文章标题:ASP中存储过程调用的两种方式及比较
作 者:佚名
更新时间:2004-11-9 17:53:02
点击次数:107'>ASP中存储过程调用…</a>[<font color=red>107</font>]</li><br><li><a href='Article_Show.asp?ArticleID=564' title='文章标题:在SQL Server中保存和输出图片
作 者:佚名
更新时间:2004-9-7 15:44:03
点击次数:172'>在SQL Server中保存…</a>[<font color=red>172</font>]</li><br><li><a href='Article_Show.asp?ArticleID=563' title='文章标题:web.config一个中文解释
作 者:佚名
更新时间:2004-9-7 15:43:28
点击次数:155'>web.config一个中文…</a>[<font color=red>155</font>]</li><br><li><a href='Article_Show.asp?ArticleID=562' title='文章标题:ASP 中健壮的页结构的异常处理
作 者:佚名
更新时间:2004-9-7 15:42:20
点击次数:145'>ASP 中健壮的页结构…</a>[<font color=red>145</font>]</li><br><li><a href='Article_Show.asp?ArticleID=558' title='文章标题:加速ASP程序的显示速度
作 者:佚名
更新时间:2004-8-31 11:14:30
点击次数:122'>加速ASP程序的显示…</a>[<font color=red>122</font>]</li><br><li><a href='Article_Show.asp?ArticleID=556' title='文章标题:ASP.NET14个热点问题解答
作 者:佚名
更新时间:2004-8-31 11:04:19
点击次数:145'>ASP.NET14个热点问…</a>[<font color=red>145</font>]</li><br><li><a href='Article_Show.asp?ArticleID=555' title='文章标题:温故知新:几个经典的ASP应用
作 者:佚名
更新时间:2004-8-31 11:01:22
点击次数:123'>温故知新:几个经典…</a>[<font color=red>123</font>]</li><br>
</td>
</tr>
</table></td>
</tr>
<tr>
<td></td>
</tr>
</table></td>
</tr>
<tr>
<td colspan="2" valign="top"><table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="23%" background="adskin/homedhbg.gif"><img src="adskin/wzpl.gif" width="173" height="34"></td>
<td height="34" background="adskin/homedhbg.gif"><strong> </strong>(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)</td>
<td width="62" valign="top" background="adskin/homedhbg.gif"><a href="#top"><img src="Images/top1.gif" width="58" height="23" vspace="4" border="0"></a></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
</table>
<script language="JavaScript">
var NS4 = (document.layers);
var IE4 = (document.all);
// window to search.
var win = window;
var n = 0;
function findInPage(str) {
var txt, i, found;
if (str == "")
return false;
if (NS4) {
if (!win.find(str))
while(win.find(str, false, true))
n++;
else
n++;
if (n == 0)
alert("抱谦!我找不到你要的内容.");
}
if (IE4) {
txt = win.document.body.createTextRange();
for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
txt.moveStart("character", 1);
txt.moveEnd("textedit");
}
if (found) {
txt.moveStart("character", -1);
txt.findText(str);
txt.select();
txt.scrollIntoView();
n++;
}
else {
if (n > 0) {
n = 0;
findInPage(str);
}
else
alert("抱谦!我找不到你要的内容.再试一次吧: (");
}
}
return false;
}
</script><div align="center">
<iframe id="baiduframe" border="0" vspace="0" hspace="0" marginwidth="0" marginheight="0"
framespacing="0" frameborder="0" scrolling="no" width="670" height="40"
src="http://unstat.baidu.com/bdun.bsc?tn=dongcnadm&csid=103&rkcs=0&bgcr=FFFFFF&ftcr=000000&rk=1&bd=1&bdas=1">
</iframe>
</div>
<table width="778" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><img src="images/spacer.gif" width="120" height="1" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="7" height="1" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="75" height="1" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="7" height="1" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="210" height="1" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="342" height="1" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="17" height="1" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="1" height="1" border="0" alt=""></td>
</tr>
<tr> <form name="search" onSubmit="return findInPage(this.string.value);">
<td rowspan="2"><img name="n22_r1_c1" src="images/22_r1_c1.gif" width="120" height="107" border="0" alt=""></td>
<td colspan="2"><img name="n22_r1_c2" src="images/22_r1_c2.gif" width="82" height="24" border="0" alt=""></td>
<td><img name="n22_r1_c4" src="images/22_r1_c4.gif" width="7" height="24" border="0" alt=""></td>
<td colspan="2" background="images/22_r1_c4.gif"> | <a href="#">设为首页 </a> | <a href="javascript:window.external.addFavorite('http://dongcn.com/','动感中国')">加入收藏 </a> | <a href="mailto:support@dongcn.com">联系我们</a> | <a href="FriendSite.asp">友情链接 </a> | <a href="Admin_login.asp">管理登录 </a> | <a href="User_Reg.asp">用户注册 </a> | <script language="javascript" src="http://dongcn.com/js/count.asp"></script> <script language="javascript" src="http://dongcn.com/js/count.asp"></script>
本页速查:
<input name="string" type="text" onBlur="if (value ==''){value='关键字'}"
onMouseOver=this.focus() onFocus=this.select()
onClick="if(this.value=='关键字')this.value=''"onChange="n = 0;" value="关键字" size=8>
<input name="submit" type="submit" value="GO"></td>
<td><img name="n22_r1_c7" src="images/22_r1_c7.gif" width="17" height="24" border="0" alt=""></td>
<td><img src="images/spacer.gif" width="1" height="24" border="0" alt=""></td>
</form>
</tr>
<tr>
<td><img name="n22_r2_c2" src="images/22_r2_c2.gif" width="7" height="83" border="0" alt=""></td>
<td colspan="3" background="images/22_r2_c2.gif"> Copyright ⊙ 2004 动感中国,All Rights Reserved <br>
版权属 <a href="http://dongcn.com/hec">动感中国 </a><a href="mailto:webmaster@dongcn.com">动感 </a>所有--<a href="weifu.asp">网站维护团队 </a><br>
E-mail: <a href="mailto:webmaster@dongcn.com">webmaster@dongcn.com</a><br>
</td>
<td colspan="2" background="images/22_r2_c6.gif"> </td>
<td><img src="images/spacer.gif" width="1" height="83" border="0" alt=""></td>
</tr>
</table>
<!--start counter-->
<script language="JavaScript">
var userid="dongcn"
</script>
<script src=http://www.dongcn.com/love/count10/countjs.asp>
</script>
<script src=http://www.dongcn.com/love/count10/shc.asp?userid=dongcn&width=120&type=2&color=0xFFFFFF&bgcolor=0xff9933&border=0x0099ff>
</script>
<!--end counter-->
<script src="stat/mystat.asp">
</body>
</html>