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方法,避免装箱操作。

最新文章

  1. mockito使用心得
  2. 简单介绍MR21和MR22
  3. Snort - manual 笔记(一)
  4. HDU 1166 敌兵布阵(线段树模板题)
  5. 屠蛟之路_重登数据库大山_SecondDay
  6. WSGI
  7. Windows Office key 持续更新地址
  8. 用SSH指令批量修改文件夹 文件权限和拥有者
  9. uva 10026 Shoemaker's Problem
  10. C#操作EXCEL的时候出现“ 无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application” ”问题
  11. 不能以方法的方式使用不可调用的“system.web.httprequest.querystring”
  12. sizeof和strlen的区别和联系总结
  13. [bzoj3955] [WF2013]Surely You Congest
  14. Typora极简教程
  15. nodejs启动web项目
  16. 基础运算符补充,流程控制之if判断/while循环
  17. FJUT3701 这也是一道数论题(线段树)题解
  18. 奇怪吸引子---RayleighBenard
  19. BMv2 simple_switch 运行时切换P4程序
  20. spark上的一些常用命令(一)

热门文章

  1. NYIST OJ 题目20 吝啬的王国
  2. Misha and Palindrome Degree
  3. JS同源策略和跨域问题
  4. php 随笔
  5. hdu_5925_Coconuts(离散化+dfs)
  6. Babel 相关资料
  7. 1.Date对象
  8. C的指针,真的很经典
  9. There was a problem parsing the package(android)
  10. MySQL-MHA高可用方案