|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱.js|程序|会见 偶然要为每篇文章统计其点击次数,假如每次扫瞄都要更新一次库的话,那功能在会见量很年夜的情形下,服务器的压力就会很年夜了,对照好一点的办法就是先将要更新的数据缓存起来,然后每隔一段工夫再使用数据库的批量处置,批量更新库。源码以下:
CountBean.java
/*
*CountData.java
*
*Createdon2006年10月18日,下战书4:44
*
*Tochangethistemplate,chooseTools|Optionsandlocatethetemplateunder
*theSourceCreationandManagementnode.Right-clickthetemplateandchoose
*Open.YoucanthenmakechangestothetemplateintheSourceEditor.
*/
packagecom.tot.count;
/**
*
*@authorhttp://www.tot.name
*/
publicclassCountBean{
privateStringcountType;
intcountId;
/**CreatesanewinstanceofCountData*/
publicCountBean(){}
publicvoidsetCountType(StringcountTypes){
this.countType=countTypes;
}
publicvoidsetCountId(intcountIds){
this.countId=countIds;
}
publicStringgetCountType(){
returncountType;
}
publicintgetCountId(){
returncountId;
}
}
CountCache.java
/*
*CountCache.java
*
*Createdon2006年10月18日,下战书5:01
*
*Tochangethistemplate,chooseTools|Optionsandlocatethetemplateunder
*theSourceCreationandManagementnode.Right-clickthetemplateandchoose
*Open.YoucanthenmakechangestothetemplateintheSourceEditor.
*/
packagecom.tot.count;
importjava.util.*;
/**
*
*@authorhttp://www.tot.name
*/
publicclassCountCache{
publicstaticLinkedListlist=newLinkedList();
/**CreatesanewinstanceofCountCache*/
publicCountCache(){}
publicstaticvoidadd(CountBeancb){
if(cb!=null){
list.add(cb);
}
}
}
CountControl.java
/*
*CountThread.java
*
*Createdon2006年10月18日,下战书4:57
*
*Tochangethistemplate,chooseTools|Optionsandlocatethetemplateunder
*theSourceCreationandManagementnode.Right-clickthetemplateandchoose
*Open.YoucanthenmakechangestothetemplateintheSourceEditor.
*/
packagecom.tot.count;
importtot.db.DBUtils;
importjava.sql.*;
/**
*
*@authorhttp://www.tot.name
*/
publicclassCountControl{
privatestaticlonglastExecuteTime=0;//前次更新工夫
privatestaticlongexecuteSep=60000;//界说更新距离工夫,单元毫秒
/**CreatesanewinstanceofCountThread*/
publicCountControl(){}
publicsynchronizedvoidexecuteUpdate(){
Connectionconn=null;
PreparedStatementps=null;
try{
conn=DBUtils.getConnection();
conn.setAutoCommit(false);
ps=conn.prepareStatement("updatet_newssethits=hits+1whereid=?");
for(inti=0;i<CountCache.list.size();i++){
CountBeancb=(CountBean)CountCache.list.getFirst();
CountCache.list.removeFirst();
ps.setInt(1,cb.getCountId());
ps.executeUpdate();⑴
//ps.addBatch();⑵
}
//int[]counts=ps.executeBatch();⑶
conn.commit();
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
if(ps!=null){
ps.clearParameters();
ps.close();
ps=null;
}
}catch(SQLExceptione){}
DBUtils.closeConnection(conn);
}
}
publiclonggetLast(){
returnlastExecuteTime;
}
publicvoidrun(){
longnow=System.currentTimeMillis();
if((now-lastExecuteTime)>executeSep){
//System.out.print("lastExecuteTime:"+lastExecuteTime);
//System.out.print("now:"+now+"
");
//System.out.print("sep="+(now-lastExecuteTime)+"
");
lastExecuteTime=now;
executeUpdate();
}
else{
//System.out.print("waitfor"+(now-lastExecuteTime)+"seconds:"+"
");
}
}
}
//注:假如你的数据库驱动撑持批处置,那末能够将⑵,⑶标志的代码前的正文往失落,同时在代码⑴前加上正文
类写好了,上面是在JSP中以下挪用。
<%
CountBeancb=newCountBean();
cb.setCountId(Integer.parseInt(request.getParameter("cid")));
CountCache.add(cb);
out.print(CountCache.list.size()+"<br>");
CountControlc=newCountControl();
c.run();
out.print(CountCache.list.size()+"<br>");
%>
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。 |
|