CLR的一个核心功能:垃圾回收。
垃圾回收的目的:提高内存利用率。
垃圾回收器,只回收托管堆栈中的内存资源,不回收其他资源(数据库连接、文件句柄。网络端口等)。
什么样的对象才会被回收?:没有变量引用的对象。
什么时间回收?:不确定,但是也可以手动调用垃圾回收器:GC.Collect();但是不建议使用。调用效率低~
垃圾回收器中“代”的概念:
共3代:第0代、第1代、第2代。
各代的回收频率:第0代最高,其次第1代,再次第2代。也就是说越老的对象生存几率越大。
(c++中叫析构函数)c#叫Finalize函数:~类名(){方法体;}。在当前对象被垃圾回收之前会调用这个函数释放其他资源。这个是不能手动调用的。因为Disposable();方法是手动释放资源的,所以内部有GC.SuppressFinalize(this),这个函数表示不再调用Finalize();了。
弱引用:WeakReference wk=new WeakReference(需要弱引用的对象的变量);通过object 变量名A=wk.Target这个属性返回boject类型来找回之前弱引用的对象。记得判断if(这个变量A==NULL)在进行强转。
=================================================================================================================
非泛型集合:ArrayList可变长度数组,使用类似于数组。Hashtable键值对的集合类似于字典,在查找元素的时候,速度很快。
ArrayList
例子:ArrayList A=new ArrayList();A.Count长度A.Capacity容量
1.ArrayList:.Count属性,表示实际元素个数。
.Capacity属性表示当前集合容量且这个容量每次2的次方增长扩展的。
.Add(object a)向集合中增加元素。
.RemoveAt(int i)其中i为索引这个方法是删去但前索引为i的值。 通过这个方法去除元素,这个集合的容量是不会变小的。
.TrimToSize();通过这个方法可以收缩总容量到实际容量。
.AddRange(ICollection a):向集合中加入一个数组。
.Remove(object a):删除的时候是判断的是否是同一个对象,如果是传进来的a和集合中的某个元素为同一个对象则这个元素被删除。调用的是Equals方法所以如果两个字符串一样不是同一对象也会被删除。
.ToArray():转成object[]数组。
Hashtable
例子:Hashtable A=new Hashtable();
.Add(boject key,boject value):向键值对中增加元素。
["key"]取值。
.ContainKey("key"):判断是否包含key。
.Remove("key"):根据键key来删除。
通过foreach(DitionaryEntry item in A)来遍历键item.Key和值item.Value。
通过foreach(var item in A.Key)遍历键item。
通过foreach(var item in A.Values)遍历值item。
=================================================================================================================
泛型集合:List<数据类型>和Ditionary。
List<数据类型>
例子:List<int> list=new List<int>();通过泛型限定了集合中存储的数据的类型。取出来的数据list[i]直接为int类型。list.ToArray()直接为int[]类型。
.Max() .Min() .Sum() .Average()
Dictiongary<键的数据类型,值的数据类型>
例子:Ditionary<string,string> dict=new Dictionary<string ,string>();
通过foreach(var item in dict.Key)遍历键item。
通过foreach(var item in dict.Values)遍历值item。
通过foreach(KeyValuePair<string,string> item in A)来遍历键item.Key和值item.Value。
=================================================================================================================
var:强类型,类型推断。推断后为什么类型编译后就为什么类型。