GC 是什么? 为什么要有 GC?
- C/C++中由程序员进行对象的回收像学校食堂中由学生收盘子,.Net 中由 GC进行垃圾回收像餐馆中店员去回收。
- GC 是垃圾收集器(Garbage Collection),程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
- GC 只能处理托管内存资源的释放,对于非托管资源则不能使用 GC 进行回收,必须由程序员手工回收。
- 例:
FileStream 或者 SqlConnection 需要程序员调用 Dispose 进行资源的回收。
- 要请求垃圾收集,可以调用下面的方法:
GC.Collect()
,一般不需要手动调用。当一个对象没有任何变量指向(不再能使用)的时候就可以被回收了,但不一定会立即被回收。
- 代码示例
object obj = new object();//只有new才会有新对象
Console.WriteLine(obj);
object obj2 = obj;
obj = null;
obj2 = null;
Console.WriteLine();
StringBuilder 和 String 的区别?
String
在进行运算时(如赋值、拼接等)会产生一个新的实例,而StringBuilder
则不会,所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用StringBuilder
,不要使用String
。
两个类的工作原理不同:
String
类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.NET框架下,这个操作实在是划不来。- 因为系统先是把两个字符串写入内存,接着删除原来的
String
对象,然后创建一个String
对象,并读取内存中的数据赋给该对象,这一来二去的,消耗了不少时间。- 使用
System.Text
命名空间下面的StringBuilder
类就不是这样了,它提供的Append
方法,能够在已有对象的原地进行字符串的修改,简单而且直接。- 一般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么
StringBuilder
类所耗费的时间和 String 类简直不是一个数量级的。
string str = null 与 string str = "" 的区别
string str = null; //不给str分配内存空间,实际上拥有的对象为Null。
string str = ""; //会给str分配长度为空字符串的内存空间。
网友评论