《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的区别在于,后者会把调用栈重置,而前者不会更改调用栈。
《C#从现象到本质》读书笔记(五)第5章字符串第6章垃圾回收第7章异常与异常处理的更多相关文章
- Android驱动开发读书笔记五
第五章 本章介绍了S3C6410开发板的功能,开发板的不同主要是在烧录嵌入式系统的方式不同,以及如何在此开发板上安装Android. 1.安装串口调试工具minicom 首先需要一根USB转串口线,由 ...
- 《CLR.via.C#第三版》第二部分第10,11章节读书笔记(五)
第10章是对 属性 做阐述 属性本质上是方法 匿名类型的使用: }; Console.WriteLine("Name={0},Year={1}",o1.Name,o1.Year); ...
- 悟道—位IT高管20年的职场心经(读书笔记五)
悟道--一位IT高管20年的职场心经 第五章 搞定老板 "老板就是老板" 这一点,你可能会忘了,他一定不会忘: "老板不会总是老板" 这一点,他可能会忘,你最好 ...
- 《JavaScript 高级程序设计》读书笔记五 引用类型
一 Object类型 a.两种创建方式: 1.new+构造函数Object; 2.对象字面量表示法: b.两种访问属性方式: 1.点表示法(.属性): 2.方括号([“属性”]): 二 Arr ...
- 《深入理解java虚拟机》读书笔记五——第六章
第六章 类文件结构 1.无关性的基石 各种不同平台的虚拟机与所有平台都统一使用程序存储格式——字节码是构成平台无关的基石. 实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java虚拟机不和包括Ja ...
- 《深入理解Java虚拟机》读书笔记五
第六章 类文件结构 1.无关性的基石 各种不同平台的虚拟机与所有平台都统一使用程序存储格式——字节码是构成平台无关的基石. 实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java虚拟机不和包括Ja ...
- 《实战Java高并发程序设计》读书笔记五
第五章 并行模式与算法 1.单例模式 是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统一个类只产生一个实例. 对于频繁创建使用的对象可以省略new 操作花费的时间,可以减少系统开销. 由 ...
- 锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]
1.表单验证插件Validation 2.表单插件Form 3.动态事件绑定插件livequery 可以为后来的元素绑定事件 类似于jQuery中的live()方法 4.jQuer ...
- R语言实战读书笔记(五)高级数据管理
5.2.1 数据函数 abs: sqrt: ceiling:求不小于x的最小整数 floor:求不大于x的最大整数 trunc:向0的方向截取x中的整数部分 round:将x舍入为指定位的小数 sig ...
随机推荐
- mysql 插入更新判断 ON DUPLICATE KEY UPDATE 和 REPLACE INTO
平时我们在设计数据库表的时候总会设计 unique 或者 给表加上 primary key 的限制条件.此时 插入数据的时候 ,经常会有这样的情况:我们想向数据库插入一条记录: 若数据表中存在以相同主 ...
- Android之ListView动态添加数据(SQLiteOpenHelper类添加数据)
一.SQLiteOpenHelper类: 这次我们通过sqlite来动态添加数据,接下来我们创建一个openHelper.java,在前面sqlite博客中我们已经详细的讲了SQLite的创建及使用等 ...
- 错误 CS0006 Metadata file 'E:\项目名称\xxxx.dll'
错误 CS0006 Metadata file 'E:\桌面临时文件\Pos\xxxx.dll' 1.找到这个类库在当前类库右键发生 找到 应用程序-->把程序集名称改成提示错误 的名称 2.找 ...
- 高阶函数map_reduce_sorted_filter
能够把函数当成参数传递的参数就是高阶函数 map map: 功能: 拿iterable的每一个元素放入func中, func的返回值放入迭代器内进行返回 参数: iterable, func 返回: ...
- 十六进制颜色值和rgb颜色值互相转换
在之前的一篇文章<将16进制的颜色转为rgb颜色>中,曾经写过将16进制的颜色转换为rgb颜色. 当然了,今天再看,还是有很多可以优化的地方,所以对之前的代码重构了一遍,并且同时写了一个反 ...
- django之Models和ORM
ORM Object Relational Mapping,简称ORM,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久 ...
- python 一些方法函数
转Python学习笔记十一:列表(3)--列表的一些方法:http://www.cnblogs.com/dabiao/archive/2010/03/12/1683942.html python中的e ...
- 收藏 —— KVM网络虚拟化
http://www.cnblogs.com/CloudMan6/p/5240770.html http://www.cnblogs.com/CloudMan6/p/5289590.html
- python中面向对象元类的自定义用法
面向对象中的常用方法 1.instance 和 issubclass instance :判断两个对象是不是一类 issubclass :判断某个类是不是另一个类的子类 #两个常用方法的使用 clas ...
- MySQL 8.0 新增SQL语法对窗口函数和CTE的支持
尝试了一下MySQL 8.0的部分新特性. 如果用过MSSQL或者是Oracle中的窗口函数(Oracle中叫分析函数), 然后再使用MySQL 8.0之前的时候,就知道需要在使用窗口函数处理逻辑的痛 ...