zoukankan      html  css  js  c++  java
  • 《C#从现象到本质》读书笔记(五)第5章字符串第6章垃圾回收第7章异常与异常处理

    《C#从现象到本质》读书笔记(五)第5章字符串

    字符串是引用类型,但如果在某方法中,将字符串传入另一方法,在另一方法内部修改,执行完之后,字符串的只并不会改变,而引用类型无论是按值传递还是引用传递,值都会发生变化。

    字符串的==操作符被重写为比较字符串的值而不是其引用。

    当使用代码将字符串变量等于一个新的值时,堆上会出现一个新的字符串,然后,栈上的变量指向该新字符串。没有任何办法更改原来字符串的值。由于字符串所有非私有的属性和字段都是只读或常量,也没有任何办法修改字符数组的值,字符串的值也就不可能改变了。

    大部分情况下,运行速度:StringBuilder>StringBuffer>String。其中,StringBuffer线程安全,StringBuilder非线程安全。

    String适用于少量的字符串操作的情况。

    StringBuilder适用于单线程下在字符缓冲区进行大量操作的情况。

    StringBuffer适用于多线程下在字符缓冲区进行大量操作的情况。

    第6章垃圾回收

    C#中,使用new关键字,即可完成为资源分配内存的动作。

    垃圾回收(GC)会做两件事:通过某种算法,识别内存中的垃圾;将垃圾回收并使得空间可以再度利用。

    局部性指的是,由于多个对象被分配在相近的内存中,导致缓存命中率提高,从而提升程序性能的一种性质。

    C#的全套GC,即标记压缩法。GC使用的垃圾回收算法是,先标记,之后将垃圾清理、释放,将幸存者升代,最后压缩,使得垃圾释放空出来的位置变得连续。

    使用using关键字可以保证对象离开using块时,CLR会自动调用它的Dispose方法。using关键字只能用于那些实现了IDisposible接口的对象。

    怎样实现垃圾回收策略:

    1)使用using关键字简化代码,并调用Dispose方法作为保证。

    2)如果类型中都是托管资源,而且也不存在任何成员继承了IDisposible接口,那么什么都不用做。

    3)如果类型中都是托管资源,存在成员继承了IDisposible接口,那么类型本身也应该继承IDisposible接口,然后在Dispose方法中逐一调用成员的Dispose方法。

    4)如果类型含有非托管资源,则:

      a)类型应当继承IDisposible接口。

      b)写一个私有方法,在方法中释放托管资源和非托管资源。

      c)实现Dispose方法,调用私有方法,之后调用GC.SuppressFinalize防止析构函数被调用。

      d)实现一个析构函数,在其中调用私有方法。

    GC有2中不同的工作模式:工作站模式和服务器模式。按照GC线程的工作方法,又可以分为并发方式和非并发方式。在工作站模式上,可以运行并发方式和非并发方式,而在服务器模式上,只能运行非并发方式。

    第7章异常与异常处理

    提高程序的健壮性。

    throw与throw ex的区别在于,后者会把调用栈重置,而前者不会更改调用栈。

  • 相关阅读:
    Typescript+WebGL+Webpack开发环境搭建
    SVG的动态之美-搜狗地铁图重构散记
    2017年个人总结-程序员的中年焦虑症
    上海2017QCon个人分享总结
    CSS预编译与PostCSS以及Webpack构建CSS综合方案
    前端工程师的基本素养
    不仅仅是复制粘贴
    《微信小程序七日谈》- 第七天:不要捡了芝麻丢了西瓜
    《微信小程序七日谈》- 第六天:小程序devtool隐藏的秘密
    《微信小程序七日谈》- 第五天:你可能要在登录功能上花费大力气
  • 原文地址:https://www.cnblogs.com/Lvkang/p/9692878.html
Copyright © 2011-2022 走看看