可能引发性能问题的几个代码写法总结

可能引发性能问题的几个代码写法,看看你占哪一个.

创新互联专注于连江企业网站建设,自适应网站建设,商城网站建设。连江网站建设公司,为连江等地区提供建站服务。全流程按需开发,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

1. int.Parse() VS int.TryParse()

你是不是正在这样写

 
 
 
  1. int id = 0;  
  2. try{ id = int.Parse(Request["id"]); }  
  3. catch{ id = 0; } 

如果是可以这样试试

 
 
 
  1. int id = 0;  
  2. int.TryParse(Request["id"], out id); 

前一种写法,一旦 Request["id"] 是非数值型的,将引发一个异常,引发异常的开销是非常巨大的,而后一种则不会引发任何异常。

2.string.IndexOf()

你正在这样写吗?

 
 
 
  1. string s = "aaa,bb";  
  2. int pos = s.IndexOf(","); 

其实对于单字符的查找,这样写会更好

 
 
 
  1. string s = "aaa,bb";  
  2. int pos = s.IndexOf(',');  

有人会问如果我要找多个字符呢,那可以试试下面的

 
 
 
  1. string s = "aaa,bb";  
  2. int pos = s.IndexOf("bb", StringComparison.OrdinalIgnoreCase);  

至于 StringComparison 的具体用法可以google或者baidu得到。

3. RegexOptions.Compiled

如果你正在使用正则并且用到了这个参数,那请你慎重,根据个人经验使用这个参数在访问量比较大的情况下可能会引发性能问题,比如cpu偏高。如果你表示怀疑,可以尝试比较使用和不用这个参数的情况下哪个性能会更好。

4.忘记关闭数据库连接

数据库连接是非常好资源的,所以从打开到关闭应该越短越好。想看看有没有忘记关闭,可以通过性能监视器的 .net Data provider for SqlClient ( 假设你用的是sqlserver ) 来查看,具体的参数说明可以通过google和baidu得到。

5.频繁的Response.Write()

 你正在这样做吗?

 
 
 
  1. Response.Write("这是第1行.< br/>");  
  2. Response.Write("这是第2行.< br/>");  
  3. Response.Write("这是第3行.< br/>"); 

此种写法频繁调用Response.Write() ,根据经验,这是相当的耗cpu,改成下面的试试

 
 
 
  1. StringBuilder sb = new StringBuilder();  
  2. sb.Append("这是第1行.< br/>");  
  3. sb.Append("这是第2行.< br/>");  
  4. sb.Append("这是第3行.< br/>");  
  5.  
  6. Response.Write(sb.ToString());  

6. 不必要的重复操作

 
 
 
  1. List< TopicInfo> list = new List< TopicInfo>();  
  2.  
  3. //从数据库得到数据  
  4. list = GetDataFromDB();  
  5. for(int i = 0;i <  list.Count; i++ )  
  6. {  
  7.     TopicInfo item = list[i];  
  8.       
  9.       
  10. }  

上面的代码估计谁都看的出来有什么不好,那下面这个代码呢

 
 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.  
  5. using System.Text.RegularExpressions;  
  6. using System.Web;  
  7.  
  8. public class UrlUBB  
  9. {  
  10.  
  11.         /// < summary>  
  12.         /// 替换UBB里面的url  
  13.         /// < /summary>  
  14.         /// < param name="content">< /param>  
  15.         /// < returns>< /returns>  
  16.         public static string RegularUrl(string content)  
  17.         {  
  18.             if (string.IsNullOrEmpty(content))  
  19.                 return string.Empty;  
  20.  
  21.             if (content.IndexOf(@"(url=", StringComparison.OrdinalIgnoreCase) == -1 || content.IndexOf(@"(/url)", StringComparison.OrdinalIgnoreCase) == -1)  
  22.                 return content;  
  23.  
  24.             Regex reg = new Regex(@"\(url=(?< url>.[^\)]*)\)(?< name>.[^\(]*)\(/url\)");  
  25.  
  26.             string url = string.Empty;  
  27.             string name = string.Empty;  
  28.             string href = string.Empty;  
  29.  
  30.             MatchCollection matches = reg.Matches(content);  
  31.             foreach (Match m in matches)  
  32.             {  
  33.                 if (m.Success)  
  34.                 {  
  35.                     url = regexUrl(m.Groups["url"].ToString());  
  36.                     name = m.Groups["name"].ToString();  
  37.                     href = string.Format("< a href=\"redirect.aspx?goto={0}\">{1}< /a>", url, name);  
  38.                     content = content.Replace(m.ToString(), href);  
  39.                 }  
  40.             }  
  41.             return content;  
  42.     }  
  43. }  

你是否考虑过这样的写法

 
 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.  
  5. using System.Text.RegularExpressions;  
  6. using System.Web;  
  7.  
  8. public class UrlUBB  
  9. {  
  10.         private static Regex reg = new Regex(@"\(url=(?< url>.[^\)]*)\)(?< name>.[^\(]*)\(/url\)");  
  11.  
  12.         /// < summary>  
  13.         /// 替换UBB里面的url  
  14.         /// < /summary>  
  15.         /// < param name="content">< /param>  
  16.         /// < returns>< /returns>  
  17.         public static string RegularUrl(string content)  
  18.         {  
  19.             if (string.IsNullOrEmpty(content))  
  20.                 return string.Empty;  
  21.  
  22.             if (content.IndexOf(@"(url=", StringComparison.OrdinalIgnoreCase) == -1 || content.IndexOf(@"(/url)", StringComparison.OrdinalIgnoreCase) == -1)  
  23.                 return content;  
  24.  
  25.  
  26.             string url = string.Empty;  
  27.             string name = string.Empty;  
  28.             string href = string.Empty;  
  29.  
  30.             MatchCollection matches = reg.Matches(content);  
  31.             foreach (Match m in matches)  
  32.             {  
  33.                 if (m.Success)  
  34.                 {  
  35.                     url = regexUrl(m.Groups["url"].ToString());  
  36.                     name = m.Groups["name"].ToString();  
  37.                     href = string.Format("< a href=\"redirect.aspx?goto={0}\">{1}< /a>", url, name);  
  38.                     content = content.Replace(m.ToString(), href);  
  39.                 }  
  40.             }  
  41.             return content;  
  42.     }  
  43. }  

如果你的代码不幸也占了那么一、两个,那么修改并对比一下性能试试看,如果你很幸运的一个也没占,那么恭喜你,你的程序性能应该还不错。

【编辑推荐】

  1. JSP页面Tomcat提高性能之王道
  2. Servlet和JSP性能优化经验谈
  3. 浅谈编写高性能的Javascript代码
  4. J2EE运行环境性能大优化
  5. 提高EJB性能十大技巧

文章名称:可能引发性能问题的几个代码写法总结
网页地址:http://www.shufengxianlan.com/qtweb/news26/398326.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联