《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的区别在于,后者会把调用栈重置,而前者不会更改调用栈。

《C#从现象到本质》读书笔记(五)第5章字符串第6章垃圾回收第7章异常与异常处理的更多相关文章

  1. Android驱动开发读书笔记五

    第五章 本章介绍了S3C6410开发板的功能,开发板的不同主要是在烧录嵌入式系统的方式不同,以及如何在此开发板上安装Android. 1.安装串口调试工具minicom 首先需要一根USB转串口线,由 ...

  2. 《CLR.via.C#第三版》第二部分第10,11章节读书笔记(五)

    第10章是对 属性 做阐述 属性本质上是方法 匿名类型的使用: }; Console.WriteLine("Name={0},Year={1}",o1.Name,o1.Year); ...

  3. 悟道—位IT高管20年的职场心经(读书笔记五)

    悟道--一位IT高管20年的职场心经 第五章 搞定老板 "老板就是老板" 这一点,你可能会忘了,他一定不会忘: "老板不会总是老板" 这一点,他可能会忘,你最好 ...

  4. 《JavaScript 高级程序设计》读书笔记五 引用类型

    一   Object类型 a.两种创建方式: 1.new+构造函数Object; 2.对象字面量表示法: b.两种访问属性方式: 1.点表示法(.属性): 2.方括号([“属性”]): 二   Arr ...

  5. 《深入理解java虚拟机》读书笔记五——第六章

    第六章 类文件结构 1.无关性的基石 各种不同平台的虚拟机与所有平台都统一使用程序存储格式——字节码是构成平台无关的基石. 实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java虚拟机不和包括Ja ...

  6. 《深入理解Java虚拟机》读书笔记五

    第六章 类文件结构 1.无关性的基石 各种不同平台的虚拟机与所有平台都统一使用程序存储格式——字节码是构成平台无关的基石. 实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java虚拟机不和包括Ja ...

  7. 《实战Java高并发程序设计》读书笔记五

    第五章 并行模式与算法 1.单例模式 是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统一个类只产生一个实例. 对于频繁创建使用的对象可以省略new 操作花费的时间,可以减少系统开销. 由 ...

  8. 锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]

    1.表单验证插件Validation   2.表单插件Form   3.动态事件绑定插件livequery 可以为后来的元素绑定事件   类似于jQuery中的live()方法     4.jQuer ...

  9. R语言实战读书笔记(五)高级数据管理

    5.2.1 数据函数 abs: sqrt: ceiling:求不小于x的最小整数 floor:求不大于x的最大整数 trunc:向0的方向截取x中的整数部分 round:将x舍入为指定位的小数 sig ...

随机推荐

  1. jsp 进度条

    <html>  <head>  <title>进度条</title>  <style type="text/css">  ...

  2. 在IntelliJ IDEA中使用VIM

    IdeaVim(下载)插件可以让你在IntelliJ IDEA中键盘敲的飞起. 安装 打开IDEA的设置,在Plugins里,你可以选择在线搜索Vim安装,当然如果不行,就可以选择单独下载后安装,以下 ...

  3. vue源码核心部分

    1.模板编译   初始化时做的:template ==parse()==>ASTtree ==generate()==>render函数  ==> mount(调用dom方法) 每次 ...

  4. jenkins-1

    1 下载jenkins,https://jenkins.io/download/, 我在此处用的是war的的形式启动的,配置tomact的server.xml,如果是一个主机多个tomact的话还要编 ...

  5. 推特算法,分布式ID

    package casclient_demo1.util; import java.lang.management.ManagementFactory; import java.net.InetAdd ...

  6. 尚硅谷springboot学习25-嵌入式Servlet容器

    SpringBoot默认使用Tomcat作为嵌入式的Servlet容器:

  7. firewalld 操作

    https://blog.csdn.net/s_p_j/article/details/80979450 firewall-cmd --permanent --add-rich-rule=" ...

  8. JavaScript: RegExp + replace

    We can use RegExp + replace to change Specific text into others we want. This picture shows the resu ...

  9. python入门学习1

    实学习每一种语言,都可以找到很快乐的学习方法.有兴趣,有乐趣,才会一直想学.知道print().input().if/else就可以做一个简陋的游戏了. print() # 打印函数,将信息打印出来 ...

  10. R语言-散点图阵

    1.pairs()函数 > pairs(iris[,1:4]) #取iris数据集的第一列到第四列两两作图 2.plot()函数 > plot(iris[,1:4], + main=&qu ...