.Net性能优化

性能条款

  • Item1 :尽可能以using来执行资源清理
    以using语句来执行实现了Dispose模式的对象,是较好的资源清理选择,简介优雅的代码实现,同时能够**自动执行**Dispose方法来销毁非托管资源。
    using (SqlConnection con = new SqlConnection(constr))
    {
    using (SqlCommand cmd = new SqlCommand(sql, con))
    {
    con.Open();
    cmd.ExecuteNonQuery();
    }
  • Item2 :推荐使用泛型集合来代替非泛型集合
    泛型实现了一种类型安全的算法重用,其最直接的应用正是在集合类中的性能与安全的良好体现(这种性能差别堆值类型的影响较大,因为引用类型不存在装箱和拆箱的问题)
    1. List<int32> list = new List<int32>();
      for(int32 i = 0;i<10000;i++)
      //使用泛型没有发生装箱
      list.Add(i);
    2. ArrayList al = new ArrayList();
      for(int32 j = 0;j<10000;i++)
      //没有使用泛型发生了装箱(装箱会带来频繁的垃圾回收和类型转化的安全检查)
      al.Add(j)
  • Item3 :初始化时最好为集合对象指定大小
    虽然例如ArrayList,Queue这些长度动态增加的集合类,可以无需指定其容量,集合本身能够根据需求自动增加集合大小,但是因为集合动态增加的过程是一个内存重新分配和集合元素复制的过程。所以在集合初始化时指定一个适当的容量是对性能的一定程度的优化
    ArrayList al = new ArrayList(2);
    al.Add("ONE")
    al.Add("TWO")
    //容量动态其实会自动增加,可以继续赋值
    al.Add("THREE")
  • Item4:合理使用System.String和System.Text.StringBuilder
    在字符串链接目标较少的情况下,应优先使用String类型,反之…
  • Item5 :几种推荐的字符串操作方法
    1. String.Compare(str1,str2)而不是str1==str2(调用的是String.Equals方法,实质是会调用一个EqualsHelper辅助方法来实施比较,内部处理相对复杂)
    2. 字符串判断为空的操作用str.Length==0
  • Item6 : 选择foreach而不是for来处理可枚举集合的循环结构
    1. foreach 能够迭代多维数组,能够自动检测数组的上下限
    2. foreach 能够自动适应不同的类型转化
    3. foreach 更加简洁,优雅,可读性更强
      ArrayList al = new ArrayList(3)
      al.Add(100);
      al.Add("Hello Word")
      al.Add(new char[]{'A','B','C'})
      foreach(object o in al)
      Console.WriteLine(o.ToString())
      for(Int32 i = 0;i<al.Count;i++)
      Console.WriteLine(al[i].ToString());
  • Item7:多线程处理应对系统设计(尚不理解
    多线程技术是轻松应对多任务处理的最强大的技术(在适应用户的响应的同时,能够完成相应的数据处理)
  • Item8: 捕获异常时,catch块中尽量指定具体的异常筛选器,多个catch块保证自上而下由特殊到一般
    catch(FileNotFoundException)
    catch(IOException)
    catch(Exception)
  • Item9:以is/as模式进行类型兼容性检查(避免不必要的异常抛出)
    is实现类型判断,as实现类型转换
  • Item10:用static readonly 来代替const(解决const可能引起的程序集引用不一致问题,带来更多的灵活性控制)
  • Item11;尽量避免不当的装箱和拆箱操作,选择别的替代方案(例如使用泛型集合代替非泛型集合,重写ToString方法来避免装箱)
  • Item12:以FxCop工具,检查代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. C#语言方面... 4 1.1 垃圾回收... 4 1.1.1 避免不必要的对象创建... 4 1.1.2 不要使用空析构函数 ★... 4 1.1.3 实现 IDisposable 接口... 4 1.2 String 操作... 5 1.2.1 使用 StringBuilder 做字符串连接... 5 1.2.2 避免不必要的调用 ToUpper 或 ToLower 方法... 5 1.2.3 最快的空串比较方法... 6 1.3 多线程... 6 1.3.1 线程同步... 6 1.3.2 使用 ThreadStatic 替代 NameDataSlot ★... 7 1.3.3 多线程编程技巧... 7 1.4 类型系统... 8 1.4.1 避免无意义的变量初始化动作... 8 1.4.2 ValueType 和 ReferenceType. 8 1.4.3 尽可能使用最合适的类型... 9 1.5 异常处理... 10 1.5.1 不要吃掉异常★... 10 1.5.2 不要吃掉异常信息★... 10 1.5.3 避免不必要的抛出异常... 10 1.5.4 避免不必要的重新抛出异常... 10 1.5.5 捕获指定的异常,不要使用通用的System.Exception. 10 1.5.6 要在finally里释放占用的资源... 11 1.6 反射... 11 1.6.1 反射分类... 12 1.6.2 动态创建对象... 12 1.6.3 动态方法调用... 12 1.6.4 推荐的使用原则... 12 1.7 基本代码技巧... 13 1.7.1 循环写法... 13 1.7.2 拼装字符串... 13 1.7.3 避免两次检索集合元素... 13 1.7.4 避免两次类型转换... 14 1.7.5为字符串容器声明常量,不要直接把字符封装在双引号" "里面。... 14 1.7.6 用StringBuilder代替使用字符串连接符 “+”. 14 1.7.7 避免在循环体里声明变量,... 15 1.8 Hashtable. 15 1.8.1 Hashtable机理... 15 1.8.2 使用HashTale代替其他字典集合类型的情形:... 16 1.9 避免使用ArrayList。... 16 1.10从XML对象读取数据... 17 1.11 避免使用递归调用和嵌套循环,... 17 1.12 使用适当的Caching策略来提高性能... 17 2. Ado.Net 17 2.1 应用Ado.net的一些思考原则... 18 2.2 Connection. 18 2.2.1 在方法中打开和关闭连接... 18 2.2.2 显式关闭连接... 18 2.2.3 确保连接池启用... 19 2.2.4 不要缓存连接... 19 2.3 Command. 19 2.3.1 使用ExecuteScalar和ExecuteNonQuery. 19 2.3.2 使用Prepare. 19 2.3.3 使用绑定变量 ★... 19 2.4 DataReader 20 2.4.1 显式关闭DataReader 20 2.4.2 用索引号访问代替名称索引号访问属性... 20 2.4.3 使用类型化方法访问属性... 20 2.4.4 使用多数据集... 20 2.5 DataSet 21 2.5.1 利用索引加快查找行的效率... 21 2. 使用DataView.. 21 3.ASP.NET. 21 3.1 减少往返行程(Reduce Round Trips)... 21 3.2 避免阻塞和长时间的作业... 22 3.3 使用缓存... 22 3.4 多线程... 22 3.5 系统资源... 23 3.6 页面处理... 23 3.7 ViewState. 23 4.JScript 24 4.1 JScript性能优化的基本原则... 24 4.2 JScript语言本身的优化... 24 4.3 DOM相关... 27 4.4 其他... 28

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值