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

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

你是不是正在这样写

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

4

如果是可以这样试试

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

3  

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

 2.string.IndexOf()

 你正在这样写吗?

string  s  =   " aaa,bb " ;

int pos = s.IndexOf(",");

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

string  s  =   " aaa,bb " ;

int pos = s.IndexOf(','); 

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

string  s  =   " aaa,bb " ;

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/> " );
4 
5 
6 

7  

此种写法频繁调用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 
 7 
 8 
 9  Response.Write(sb.ToString());

10  

 

6. 不必要的重复操作

 List<TopicInfo> list = new List<TopicInfo>();

// 从数据库得到数据
list  =  GetDataFromDB();
for ( int  i  =   0 ;i  <  list.Count; i ++  )
{
    TopicInfo item 
=  list[i];
    
    
}


 

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

using  System;
using  System.Collections.Generic;
using  System.Text;

using  System.Text.RegularExpressions;
using  System.Web;

public   class  UrlUBB
{

        
///   <summary>
        
///  替换UBB里面的url
        
///   </summary>
        
///   <param name="content"></param>
        
///   <returns></returns>
         public   static   string  RegularUrl( string  content)
        {
            
if  ( string .IsNullOrEmpty(content))
                
return   string .Empty;

            
if  (content.IndexOf( @" (url= " , StringComparison.OrdinalIgnoreCase)  ==   - 1   ||  content.IndexOf( @" (/url) " , StringComparison.OrdinalIgnoreCase)  ==   - 1 )
                
return  content;

            Regex reg 
=   new  Regex( @" /(url=(?<url>.[^/)]*)/)(?<name>.[^/(]*)/(/url/) " );

            
string  url  =   string .Empty;
            
string  name  =   string .Empty;
            
string  href  =   string .Empty;

            MatchCollection matches 
=  reg.Matches(content);
            
foreach  (Match m  in  matches)
            {
                
if  (m.Success)
                {
                    url 
=  regexUrl(m.Groups[ " url " ].ToString());
                    name 
=  m.Groups[ " name " ].ToString();
                    href 
=   string .Format( " <a href=/ " redirect.aspx ? goto = { 0 }/ " >{1}</a> " , url, name);
                    content 
=  content.Replace(m.ToString(), href);
                }
            }
            
return  content;
    }

}

 

你是否考虑过这样的写法

using  System;
using  System.Collections.Generic;
using  System.Text;

using  System.Text.RegularExpressions;
using  System.Web;

public   class  UrlUBB
{
        
private   static  Regex reg  =   new  Regex( @" /(url=(?<url>.[^/)]*)/)(?<name>.[^/(]*)/(/url/) " );

        
///   <summary>
        
///  替换UBB里面的url
        
///   </summary>
        
///   <param name="content"></param>
        
///   <returns></returns>
         public   static   string  RegularUrl( string  content)
        {
            
if  ( string .IsNullOrEmpty(content))
                
return   string .Empty;

            
if  (content.IndexOf( @" (url= " , StringComparison.OrdinalIgnoreCase)  ==   - 1   ||  content.IndexOf( @" (/url) " , StringComparison.OrdinalIgnoreCase)  ==   - 1 )
                
return  content;


            
string  url  =   string .Empty;
            
string  name  =   string .Empty;
            
string  href  =   string .Empty;

            MatchCollection matches 
=  reg.Matches(content);
            
foreach  (Match m  in  matches)
            {
                
if  (m.Success)
                {
                    url 
=  regexUrl(m.Groups[ " url " ].ToString());
                    name 
=  m.Groups[ " name " ].ToString();
                    href 
=   string .Format( " <a href=/ " redirect.aspx ? goto = { 0 }/ " >{1}</a> " , url, name);
                    content 
=  content.Replace(m.ToString(), href);
                }
            }
            
return  content;
    }

}

 

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

 

对于怎么样的文章才应该放博客园首页,争端好像一直不断。虽然本文不是什么大作,也没有华丽的词藻,但毕竟是个人原创,经验之谈,所以斗胆放在首页,算是支持一下原创也不为过吧。如果你有更好的性能体验或者的程序的优化经验,不妨也拿出来共享一下,这对你好、我好,大家好才是真的好嘛!

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值