1. Foreach 比 For 性能高30%
2. 避免是使用ArrayList, 因为任何对象到ArrayList都有封装为Object,出来还要拆箱。 
   用泛型去掉
3. HashTalbe取代 StringDirectionary, NameValueCollection, HyBridCollection
4. 为字符串容器,声明为常量
   const String c = "Active";
   MyObject obj = new MyObject();
   obj.Status = c;
5. if(String.Compare(str1,str2,true) == 0){} // 比用UpperCase,Lowsercase效率要高
6. StringBuilder sbXml = new StringBuilder(); sbXml.append("abc"); asbXml.ToString();
7.  读取XML问题 (下次再详细理解)
8. 避免在循环里声明变量, 推荐在循环外声明,循环里初始化
9. 不用使用System.Execption ,简单但性能会比较差
   try
   {
   }
   catch(System.NullReferenceException exc)
   {
  //对空对象异常的处理
   }
   catch(System.ArgumentOutOfRangException exc)
   {
 //超出范围的异常处理
   }
   catch(System.InvalidCastException exc)
   {
    //对异常转换的处理
   }
10.  不用用Exception 控制程序的流程

try
 { result = 100/num;}
 catch
 {
   result = 0;
 }
 
 if(num != 0)
 {
  result = 100 / num;
 }
 else
 {
  result = 0;
 }
 
11. 用using 和 try/finally 做资源清理
使用非托管的资源类型,必须实现IDisposalbe的Dispose()方法,精确的释放资源。
.net 中释放资源的代码的责任是类型的使用者。 不是类型或系统。

在使用有Dispose()方法的类型时,就有责任调用Dispose() 方法去释放资源。 用using 或者 try/finally 是最好的。

如果不释放会一直待在内存中,知道析构函数在确切的时候去释放。 这样系统很可能系统资源被占得太多而放慢了速度。

SqlConnection conn = new SqlConnection(strConn);
conn.open();
SqlCommand cmd = conn.CreateCommand();
cmd.ExecuteNonQuery();
cmd.Dispose();
conn.Dispose();
------------------
using(SqlConnection conn = new SqlConnection(strConn))
{
 using(SqlCommand cmd = new SqlCommand(strCmm,conn))
 {
  conn.open();
  cmd.ExecuteNonQuery();
 }
}
---------------------
如上代码,一个using会自动创建一个try/finally, 这样上述就形成了try/finally嵌套了。
如果遇到会实现多个 IDisposeable接口时,用 try/finally 更好些。
public void ExecuteCommand(string strCon, string strCmd)
{
 Sqlconneciotn conn = null;
 SqlCommand cmd = null;
 try
 {
  conn = new SqlConnection(strConn);
  cmd = conn.CreateCommand();
  cmd.CommandText = strCmd;
  cmd.ExecuteNonQuery();
 }
 finally
 {
  if(conn != null)
   conn.Dispose();
  if(cmd != null)
   cmd.Dispose();
 }
}
// 这里判断是否为Null 很重要,有时释放是隐式的, 如果再释放机会报错。
----------------
并不是所有的都可以放入 using ,必须是实现IDispose接口的。
----------------
有些对象同时支持Dispose和Close两个方法,SqlConnection就是其中。 可以直接 sqlConnection.Close(); 关闭资源

Dispose会释放更多的资源,他会告诉GC这个对象不需要在习惯了。 Dispose会调用 GC.SuppressFinalize(),但Close不会。
所以Close连接时,对象也会到析构队列中排队等待释放。 所以当你有选择时,Dispose比Close要好。

当实现了IDisposeable接口时,请确保被正确的释放。最好放入using或try/finally 中

12. 避免滥用反射,反射是比较浪费性能的操作。
用反射时,CLR会做校验参数,检查权限等工作,所以速度会非常的慢。所以尽量避免使用。 如果需要用动态构造类型(晚绑定),可以用如下方式去代替
 a. 用类的继承关系。 用基类的虚方法。 运行时,生产该类型的实例,将对其的引用方都其基础类型的一个变量中,然后调用该基础类型的虚方法。
 b. 用接口去实现。 将其引用放到接口类型的变量中,然后调用接口定义的虚方法
 c. 用委托。  再理解,这方式不如 a,b效率来的快。

13. 使用值类型的ToString方法,避免装箱操作。

网站的性能优化与安全(高效C#编码优化)的更多相关文章

  1. 高效C#编码优化

    1.foreach VS for 语句 Foreach 要比for具有更好的执行效率Foreach的平均花费时间只有for的30%.通过测试结果在for和foreach都可以使用的情况下,我们推荐使用 ...

  2. IIS网站服务器性能优化指南(转载)

    原文网址:http://www.phontol.com/20090507_419416_1.html       Windows Server自带的互联网信息服务器(Internet Informat ...

  3. IIS网站服务器性能优化攻略

    Windows Server自带的互联网信息服务器(Internet Information Server,IIS)是架设网站服务器的常用工具,它是一个既简单而又麻烦的东西,新手都可以使用IIS架设一 ...

  4. 提高网站访问性能之Tomcat优化

    一.前言 tomcat 服务器在JavaEE项目中使用率非常高,所以在生产环境对tomcat的优化也变得非常重要了,对于tomcat的优化,主要是从2个方面入手,一是tomcat本身的配置,另一个是t ...

  5. 前端性能优化(三)——传统 JavaScript 优化的误区

    注:本文是纯技术探讨文,无图无笑点,希望您喜欢 一.前言 软件行业极其缺乏前端人才这是圈内的共识了,某种程度上讲,同等水平前端的工资都要比后端高上不少,而圈内的另一项共识则是--网页是公司的脸面! 几 ...

  6. CDN系统对网站的性能有极大的提升

    CDN系统对网站的性能有极大的提升 打开一个网站 我们只是请求了一个页面.单个页面,实际上所有文件都是一个新的请求.以新浪为例一共发起了35个请求. 这35个请求中.只有一个动态内容.其它均为静态.这 ...

  7. 提高PHP性能的实用方法+40个技巧优化您的PHP代码

    1.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的"函数" ...

  8. Spark性能调优之代码方面的优化

    Spark性能调优之代码方面的优化 1.避免创建重复的RDD     对性能没有问题,但会造成代码混乱   2.尽可能复用同一个RDD,减少产生RDD的个数   3.对多次使用的RDD进行持久化(ca ...

  9. 性能调优之MYSQL高并发优化

    性能调优之MYSQL高并发优化   一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之 ...

随机推荐

  1. hbase伪分布

    1.编辑 conf/hbase-env.sh来告知HBase java的安装路径.在这个文件里你还可以设置HBase的运行环境,诸如 heapsize和其他 JVM有关的选项, 还有Log文件地址,等 ...

  2. PAT 团体程序设计天梯赛-练习集 L1-005. 考试座位号

    每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座 ...

  3. HDU 2181 哈密顿绕行世界问题

    Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input 前20行的第i行有3个数, ...

  4. Glusterfs[转]

    原文地址:http://support.huawei.com/ecommunity/bbs/10253434.html 1.      GlusterFS概述 GlusterFS是Scale-Out存 ...

  5. 浙大pat 1029题解

    1029. Median (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given an incre ...

  6. MySQL字符串类型

    VARCHAR类型用于存储变长字符串,它会删除末尾的所有空格,它比定长字符串更省空间,因为它仅使用必要的空间(越短的字符串占用越少),VARCHAR会用1或2个额外字节记录字符串长度(如果字符串长度不 ...

  7. RocketMQ初步应用架构理论

    RocketMQ初步应用架构理论 写给RocketMQ架构应用入门,内容涉及它的设计机理以及推到出来的应用注意事项,入门人员请看. 稍微涉及技术细节,留以我设计中间件时参考,将来整理深度文档时会抽取走 ...

  8. ActiveMQ in Action(3) - Persistence

    关键字: activemq 2.3 Persistence2.3.1 AMQ Message Store    AMQ Message Store是ActiveMQ5.0缺省的持久化存储.Messag ...

  9. HDU 2037 今年暑假不AC(贪心)

    今年暑假不AC Problem Description “今年暑假不AC?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了 ...

  10. PHP中使用CURL(三)

    对 post 提交的数据进行 http_build_query处理,然后再send出去,能实现更好的兼容性,更小的请求数据包. <?php /** * PHP发送Post数据 * @param ...