一、 垃圾回收
1. 垃圾回收的目的:提高内存的利用效率。
2. 垃圾回收器: 只回收托管堆中的内存资源,不回收其他资源(数据库连接、文件句柄、网络端口等);
3. 什么时候垃圾回收?
a) 当对象没有任何变量指向的时候就可以被垃圾回收了。(可以被回收,但是不知道什么时候可以回收,回收是由系统决定的
b) GC.Collect(); //手动调用垃圾回收(一般不需要手动调用垃圾回收,由系统自动调用)
c) 不要手动调用,因为垃圾回收会调用一系列的算法,需要移动对象等等,这时为了达到目的,需要暂停应用程序的已处理,这时如果频繁的调用垃圾回收反而会影响性能。
4. 垃圾回收器中的“代”的概念
a) 垃圾回收中的代有三代:
i. 回收的时候优先回收第0代,没有回收的移动到第一代,第一代和第二代要倒满的时候才能回收。
b) 垃圾回收采用代的概念,避免了每次垃圾回收都遍历所有的对象,减少了垃圾回收的时间。
第0代的回收频率高,第1代次之,第2代再次之。
效果:越老的对象活的越长。
5. 除了内存资源之外的其他资源。
a) 使用Dispose();释放除内存之外的方法。
b) ~Class1(){}//析构函数(c++中的名称)在C#中叫Finalize()函数(终结函数)
与类名相同
在当前对象被垃圾回收之前会调用Finalize()函数,释放其他资源。
6. 弱引用:WeakReference,对于创建比较耗时的对象可以使用若引用
什么时候使用弱引用:一般用在创建比较耗时的对象。
二、 集合类
1. ArrayList(非泛型) –> List<T>(泛型)
Hashtable(非泛型)--->Dictionary<K,V>(泛型)
2. 数据的特点:类型统一、长度固定
3. 集合的常用操作:添加、遍历、移除
4. ArrayList集合:
a) ArrayList arr = new ArrayLlist();
Arr.Count//实际的个数(属性)
Arr.Capacity;容量。集合的容量是递增翻倍,初始容量是4(属性)
Arr.TrimToSize();//将总容量“收缩”为实际容量
5. Hashtable键值对集合,类似于字典,
键的地址是算出来的,所以高性能。
• Hashtable 键值对的集合,类似于字典,Hashtable在查找元素的时候,速度很快。
• Add(object key,object value);
• hash[“key”]
• hash[“key”]=“修改”;
• .ContainsKey(“key”);
• Remove(“key”);
• 遍历:
• hash.Keys
• hash.Values/DictionaryEntry
• 键值对集合中的“键”,绝对不能重复。
三、 泛型集合(在.Net2.0之后出现的)
1. 通过泛型可以限定集合中存储的类型
2. List<int> list = new List();
a) 由于增加的时候都是int 类型,所以取值的时候获取的值直接就是int 类型,无需类型转换。
b) 微软推荐使用List<T>泛型集合,他是ArrayList的升级版
3. Dictionary<string,string> dict = new Dictionary<string,string>();
a) 用这个来替换Hashtable
b) 遍历:foreach(KeyValuePair<T,T> kv in dict)//可以将key和value一起遍历出来
四、 Var关键字简述(是一个强类型,在程序编译的时候就已经替换成相应的数据类型)
类型推断
注:在JavaScript中的var是一个弱类型