ASP.NET第六天加强课程

第六天

蓝色的关键字是c#语言的   大写的都是代表的微软中间语言的

CLR的一个核心功能-----垃圾回收;

目的:提高内存利用率;

垃圾回收器只回收托管堆中的内存资源,不回收其他资源(数据库连接文件句柄网络端口等);      只回收引用类型,不回收值类型

 

没有变量引用的对象没有变量引用的对象,表示可以被回收了(null), 断了线的风筝再也回不来了;

例子大学食堂(自己收盘子), 大排档(不需要程序员自己收盘子)

 

回收时间不确定当程序需要新内存的时候开始执行回收;

GC.Collect(); //手动调用垃圾回收器一般不需要手动调用垃圾回收由系统自动调用;

最好不要手动调用,因为垃圾回收有一系列的算法,需要移动对象等等这时为了达到目的需要暂停应用程序的已处理这时如果频繁的调用垃圾回收反而影响性能;

 

 

什么样的情况下是可以回收的:

 

垃圾回收0代开始0代满时就进行就会回收,并把不需要回收的放入第当内存不足时 再次对0代进行回收剩余的放入第,当第1代也满是才回收第1,并把幸存者放入第再次从第0代开始回收;   越老的对象活的越长

只有这3;

 

Dispose 垃圾回收

 

~Class1()

{

  //不能手动调用,所以一般回收其他内存

}

c++中叫析构函数,  c#中叫Finalize ()函数中文终结函数;

在当前对象呗垃圾回收之前会调用Finalize() 函数释放其他资源;

 

Object pnew = wk .target;  //这个可以再次调用若引用中的对象;

若引用       

       //若引用就是现在不使用的对象感觉以后可能使用的,可以使用若引用如果系统回收了也没有问题的对象;

一般用在那些创建时比较耗时的对象

集合

ArrayList 集合的方法;  集合中可以有任意类型;

ArrayList.count 集合的实际个数增加删除时,会随时改变;

.Capacity 属性 ,表示当前集合的容量  翻倍增加的

.capacity 的容量以每次翻倍扩展的;

.Add(object)向集合中增加元素;

.RemoveAt(0) 删除集合中的第0个元素;

 

这时的s2可以删除因为删除前,如果对其进行了重写,则可以删除原因是微软内部所采用的技术是equals来进行比较的

Hashtable 后面可以用Dictionary来进行代替;

键值对的集合:   键绝对不能重复

的地址是算出来的不是遍历查找出来的所以高性能;

 

 

键中是否包含:

 

想要遍历键中的所有成员,使用:

 

单独遍历键

 

单独遍历值

 

 

随机数random产生的随即数都是伪随即数,都是假的为随即数就需要一个种子;

只要种子一样,每次产生的随机数都是一样的:

不要讲random写在循环里面;

 

将集合转换成字符串并输出;

StringBuilder sb = new StringBuilder();

            for (int i = 0; i <arro.Count; i++)

            {

                sb.Append(arro[i] + " ");        //arro是一个集合;

            }

            Console.WriteLine(sb.ToString());

 

 

泛型集合使用泛型集合:

命名空间system. Collections .generic

List<int> list=new list<int>();   int表示当前的类型只能是整型;

 

Dictionary<k,v>类似于Hashtable, Hashtable的升级版;

 

通过泛型就可以限定集合中存储的数据的类型;

List<int> list = new List<int>();

            //增加数据的时候必须是对应的数据类型;

            list.Add(10);

            list.Add(20);

            list.Add(23);

            //list.Add("d");   //只能是int类型

            for (int i = 0; i <list.Count; i++)

            {

                Console.WriteLine(list[i]);

            }

            //返返回值类型变成了整数数组;            //list.ToArray();

 

由于增加的时候都是int类型所以取值的时候不用类型转换直接就是int类型;

微软默认使用泛型集合;

扩展方法

Console.WriteLine(list.Max());

            Console.WriteLine(list.Min());

            Console.WriteLine(list.Sum());

这些都是系统为我们准备好的方法, 可以直接使用

Dictionary<string, Person> dict = new Dictionary<string, Person>();

            Dictionary<Personstring> dict = new Dictionary<Personstring>();

            Person p1 = new Person() { Name = "yjz" };

            dict.Add(p1, p1.Name);

            Console.WriteLine(dict[p1]);

//键和值是可以相互调换的, 键可以是person类型, 也可以是 string类型

//遍历键

foreach (Person item in dict.Keys)

            {

                Console.WriteLine(item);

//遍历值

foreach (string item in dict.Values)

            {

                Console.WriteLine(item);

//即遍历键又遍历值的方法

foreach (KeyValuePair<Person,string> kv in dict)

            {

                Console.WriteLine("键ü:{0},值μ:{1}",kv.Key,kv.Value);

 

Var是一个类型推断在程序的编译的时候就已经换成了对应的数据类型所以说var是一个强类型 (指的是在编译的时候已经可以确定数据类型了),  而不是弱类型;

list可以直接转换成string类型的数组;

原文地址:https://www.cnblogs.com/mafacai/p/2810521.html