精简高效的C#网站优化经验技巧总结

目录

对大型网站,技术涉及面非常广,对硬件,软件,编程语言,Web Service,防火墙等等有很高要求。

面对大量用户,高并发请求,可以使用高性能服务器,高性能编程语言,高性能数据库,加大带宽等,这意味着巨大的投入。

如果你没有这样的打算,而又想获得更好的系统性能,则需要我们精打细算,从"软"的方面着手。

如果你有过以下的一些用法,或者有不同见解,请赐教。

(1)Foreach比for有更好的执行效率。

Foreach所花的时间大约只有for的30%,通过测试结果,在两者都可以使用的情况下,我们推荐效率更高的Foreach。另外用for写入数据的时间大约是读取数据时间的10倍。

(2)避免使用ArrayList

因为任何对象存放到里面,都要转化为System.Object类型,从ArrayList中取出数据要拆箱回原来的类型。建议使用.NET2.0的泛型,这是一个强类型,可以避免装箱拆箱的性能消耗。

(3)不要使用UpperCase,LowerCase转换字符串,再进行比较。用String.Compare代替,他可以忽略大小写进行比较。

(4)用StringBuilder代替字符串连接符"+"

原因,见我的另一篇文章String 和BulidString性能比较和内在机制

(5)避免在循环内声明变量,应该在循环外声明变量,在循环里初始化

//避免
 for(int i=0;i<10;i++)
{
AnyClass cl=new AnyClass();
//……
}
//推荐
for(int i=0;i<10;i++)
{
cl=new AnyClass();
//……

(6)捕获异常,不用使用System.Exception

//避免
 try
 {
 //TODO
 }
 catch (Exception ex)
 {
 //TODO(虽然简单,但性能较差)
 }
  //推荐
  try
  {
  //TODO
  }
  catch (System.NullReferenceException ex)
  {
  //对空对象异常处理
  }
  catch (System.ArgumentOutOfRangeException ex)
  {
  //超出范围异常处理
  }
  catch (System.InvalidCastException ex)
  {
  //对异常转化的处理
  }

(7)不要使用异常控制程序流程。

异常捕获对性能的消耗很大,众所周知的,能避免使用最好不用

     //避免
try
{
result=200/num;
}
catch (Exception ex)
{
result=0
 }
 //推荐
 try
 {
 result=num!=0?200/num:0;
 }
 catch (Exception ex)
 {
 result=0
 }

(8)在遇到调用实现IDisposable对象的时候,用Using和try/finally来释放资源

//避免
 public void ExceuteCommand()
             {
                 SqlConnection sql=new SqlConnection(strCon);
                 SqlCommand cmd=new SqlCommand(sql);
                 sql.Dispose();//上面出错,此处有可能永远都调用不到
                 cmd.Dispose();
             }
  //建议
 //Using内并不是可以放任何对象,只有实现了IDisposable接口的对象才能被使用。
 //编译器成IL时候,Using会自动把内容放在try/finally里面。
  try
             {
                 using(SqlConnection sql=new SqlConnection(strCon))
                 {
                      using(SqlCommand cmd=new SqlCommand(sql))
                     {
                     //TODO
                     }
                 }
             }
             catch (Exception ex)
             {
                 //
             }
             finally{
                 //或者
                 //sql.Dispose();
                 //cmd.Dispose();
             }
 //推荐
 因为如果遇到多个实现IDisposable接口的对象需要释放,try/finally更好些
  //推荐
             SqlConnection sql=null;
             SqlCommand cmd=null;
             try
             {
                 sql=new SqlConnection(strCon);
                 cmd=new SqlCommand(sql);
                 sql.Open();
                 cmd.ExecuteNonQuery();
             }
             finally{
                 if(sql!=null)
                   sql.Dispose();
                 if(cmd!=null)
                   cmd.Dispose();
             }

(9)避免使用反射,反射是比较浪费性能的操作

通过反射来调用类型或方法,字段或属性是CLR要做更多的工作,如校验参数,检查权限,所以速度是非常慢的。对于打算写一个动态构造类型(晚绑定)的应用程序,可以通过继承,接口,委托来实现。

(10)值类型组合成字符串,请使用.ToStrng()方法,避免装箱操作。

//避免
var str="hello"+1+2;
//推荐
var str="hello"+1.ToString()+2.ToString();

(11)StopWatch类测试运行时间

public delegate void AddHandler();
     class Program
     {
         static void Main(string[] args)
         {
             Utility.ProcessTimeSpan(Program.Add);
             Console.Read();
         }
         public static void Add()
         {
             var a = 0;
             for (int i = 0; i < 100000000; i++)
             {
                 a++;
             }
         }
     }
  public static class Utility
     {
         public static void ProcessTimeSpan(AddHandler addDelegate)
         {
   //推荐
             DateTime start = DateTime.Now;
             var timer = Stopwatch.StartNew();
             addDelegate();
             timer.Stop();
             Console.WriteLine("Method took {0} ms", timer.ElapsedMilliseconds);
  //传统
 DateTime start = DateTime.Now;
 SomeCodeToTime();
 DateTime end = DateTime.Now;
 Console.WriteLine("Method took {0} ms", (end - start).TotalMilliseconds);
         }
     } 

以上就是精简高效的C#网站优化经验技巧总结的详细内容,更多关于C#网站优化经验的资料请关注我们其它相关文章!

(0)

相关推荐

  • ASP.NET性能优化小结(ASP.NET&C#)

    ASP.NET: 一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量. 如果用动态的SQL语句来返回多个数据集,那用存储过程来替代动态的SQL语句会更好些.是否把业务逻辑写到存储过程中,这个有点争议.但是我认为,把业务逻辑写到存储过程里面可以限制返回结果集的大小,减小网络数据的流量,在逻辑层也不

  • 关于C#程序优化的五十种方法

    一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定,使用属性可以获得数据绑定的好处: 2.在属性的get和set访问器重可使用lock添加多线程的支持. 二.readonly(运行时常量)和const(编译时常量) 1.const只可用于基元类型.枚举.字符串,而readonly则可以是任何的类型: 2.const在编译时将替换成具体的常量,这样如果在引用中同时使用了const和readonly两种值,则对readonly的再次改变将会改变设计的初衷,这是需要重新编译所更改的程序集,

  • asp.net 程序性能优化的七个方面 (c#(或vb.net)程序改进)

    1.使用值类型的ToString方法 在连接字符串时,经常使用"+"号直接将数字添加到字符串中.这种方法虽然简单,也可以得到正确结果,但是由于涉及到不同的数据类型,数字需要通过装箱操作转化为引用类型才可以添加到字符串中.但是装箱操作对性能影响较大,因为在进行这类处理时,将在托管堆中分配一个新的对象,原有的值复制到新创建的对象中. 使用值类型的ToString方法可以避免装箱操作,从而提高应用程序性能. int num=1; string str="go"+num.T

  • C#程序优化-有效减少CPU占用率

    最近开发的项目中,由于会用到比较耗费CPU资源的第三方程序ffmpeg来处理视频.所以在网上找了一下,如何解决这种问题. 于是乎,就得到一个结论,减少CPU占用率,可以通过减少使用的CPU数量,在Window系统下,打开一个exe程序,系统会默认使用所有CPU作为处理. 是不是减少CPU使用数量,就可以减少CPU占用率呢,答案是肯定的. 参考代码:这里使用calc作为例子. Process p = new Process(); p.StartInfo.FileName = @"c:\window

  • 精简高效的C#网站优化经验技巧总结

    目录 对大型网站,技术涉及面非常广,对硬件,软件,编程语言,Web Service,防火墙等等有很高要求. 面对大量用户,高并发请求,可以使用高性能服务器,高性能编程语言,高性能数据库,加大带宽等,这意味着巨大的投入. 如果你没有这样的打算,而又想获得更好的系统性能,则需要我们精打细算,从"软"的方面着手. 如果你有过以下的一些用法,或者有不同见解,请赐教. (1)Foreach比for有更好的执行效率. Foreach所花的时间大约只有for的30%,通过测试结果,在两者都可以使用的

  • MySQL数据库21条最佳性能优化经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情. 当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被M

  • 9种 MySQL数据库优化的技巧

    目录 1.选择最合适的字段属性 2.尽量把字段设置为NOT NULL 3.使用连接(JOIN)来代替子查询(Sub-Queries) 4.使用联合(UNION)来代替手动创建的临时表 5.事务 6.使用外键 7.锁定表 8.使用索引 9.优化de的查询语句 9.1 不使用子查询 9.2 避免函数索引 9.3 用IN来替换OR 9.4 LIKE双百分号无法使用到索引 9.5 读取适当的记录LIMIT M,N 9.6 避免数据类型不一致 9.7 分组统计可以禁止排序 9.8 避免随机取记录 9.9

  • 日常收集整理SqlServer数据库优化经验和注意事项

    网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 优化数据库的注意事项: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert,可惜我没找到unexpired的序列号) 5.清理删除日志. SQL语句优化的基本原则: 1.使用索引来更快地遍历表. 缺省情况下建立的索引是非群集索引,但有时它并不是最

  • SQL优化经验总结

    一. 优化SQL步骤 1. 通过 show status和应用特点了解各种 SQL的执行频率     通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extende d-status 命令获得. SHOW STATUS 可以根据需要显示 session 级别的统计结果和 global级别的统计结果. 如显示当前session: SHOW STATUS like "Com_%"; 全局级别:show global status;    以下几个参数

  • shell性能测试脚本优化的技巧

    最初脚本 脚本名称:authTest.sh(备注:这个开发给过来的测试脚本,我们作为测试要检查一下) #!/bin/bash for ((i=0;i<=1000;i++)) do sh /usr/local/yeqinfang/device-authentication/src/device/build/authTest.sh& done 运行结果: 从上面看,运行结果没有任何提示,也不知道运行到什么程度,相当不友好,那我们来美化一下吧!等等!这是个死循环,通过脚本运行自己,所以会永远运行下

  • 高效jQuery选择器的5个技巧实例分析

    本文实例讲述了高效jQuery选择器的5个技巧.分享给大家供大家参考,具体如下: 顾名思义,jQuery专注于查询(queries).库的核心允许你使用CSS选择器语法,以及通过在集合上执行函数,来查找DOM元素. jQuery使用浏览器原生API方法获取DOM集合.现代浏览器支持getElementsByClassName, querySelector以及querySelectorAll(可以解析CSS语法).然而,老版本的浏览器可能只提供getElementById以及getElementB

  • .NET使用结构体替代类提升性能优化的技巧

    目录 前言 现实的案例 内存占用 计算速度 总结 附录 前言 我们知道在C#和Java明显的一个区别就是C#可以自定义值类型,也就是今天的主角struct,我们有了更加方便的class为什么微软还加入了struct呢?这其实就是今天要谈到的一个优化性能的Tips使用结构体替代类.那么使用结构体替代类有什么好处呢?在什么样的场景需要使用结构体来替代类呢?今天的文章为大家一一解答.注意:本文全部都以x64位平台为例 现实的案例 举一个现实系统的例子,大家都知道机票购票的流程,开始选择起抵城市和机场(

  • 前端性能优化及技巧

     前言        为什么要优化性能对于前端工程师如此重要 在行业内有句话不知道大家有没有听说过,'懂得性能优化并且研究过jquery源代码的人和不懂得性能优化写出来的代码对于性能的消耗会相差上百倍甚至上千倍',现在的javascript属于从ECMAscript3到ECMAscript5以及ECMAscript6的一个过渡的过程.在javascript的编写不健全的时候编写代码方法不得当,引起的问题也是不容忽视的. 性能优化 下面将自己对于性能优化的一些见解与大家分享: 1.精灵图     

  • 分享五个PHP7性能优化提升技巧

    PHP7已经发布了, 作为PHP10年来最大的版本升级, 最大的性能升级, PHP7在多放的测试中都表现出很明显的性能提升, 然而, 为了让它能发挥出最大的性能, 我还是有几件事想提醒下. 1. Opcache 记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快, 所以之前测试时期就发生了有人一直没有启用Opcache的事情. 启用Opcache非常简单, 在php.ini配置文件中加入: zend_extension=opcac

随机推荐