一、             .NET Framework
.NET Framework 是支持生成和运行下一代应用程序和xml WebService的内部Windows组件。它旨在实现以下目标:
*         提供一个一致的面向对象的编程环境,而无论对象代码是本地存储还是执行。
*         提供一个将软件部署和版本控制冲突最小化的代码执行环境
*         提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。
*         使开发人员的经验在面对类型大不相同的应用程序时保持一致。
*         按照工业标准生成所有通信,以确保基于.NET Framework的代码可与任何其他代码集成。
.NET Framework 有两个主要组件:公共语言运行库类库
  公共语言运行库将加载进来的程序集或可执行文件转换为本机机器指令,使这些      代码能够在本机器上正常执行。
  使用基于公共语言运行库的语言编译器开发的代码称为托管代码,其优点有:
      1跨语言集成      2跨语言异处理      3增强的安全性
          4版本控制    5 部署支持    6简化的组件交互模型  7 调试和分析服务
  使用公共语言可以把源代码生成一个程序集,程序集是以元数据和中间代码的形式存储。
     .NET Framework的类库是一个综合性的面向对象的可重用类型集合。
二、       .NET Framework的垃圾回收器
.NET Framework的垃圾回收器管理应用程序的内存分配和释放。每次使用new运算符创建对象时,运行库都会从托管堆中为该对象分配内存。而内存是有限的,所以垃圾回收器必须执行回收以便释放一些内存。当垃圾回收器回收时它会检查托管堆中不再被应用程序使用对象并执行必要的操作来回收他们占用的内存。
垃圾回收过程有两个阶段:
  1 标记阶段 :从根标记遍历到的对象
  2 压缩阶段 :释放没有标记的对象内存,调整存在对象的位置。
代是CLR垃圾收集器的一种机制,它存在的唯一目的就是提高应用程序性能
   一个基于代的垃圾收集器有以下几点假设:
      1对象越新,其生存期就越短
      2对象越老,期生存期就越长。
      3对托管堆的一部分执行垃圾收集比对整个托管堆执行垃圾收集快。
   CLR初始化时,托管堆中没有任何对象,此时添加对象时为第0代。
   CLR支持3代内存
       0代对象预算容量为256K
       1代对象预算容量为2M
       3代对象预算容量为10M
   当向第0代添加对象而容量不够时就会遍历检索对象并且标记还有应用程序使用的对象,遍历结束后当执行垃圾回收时就会将没有标记的对象内存释放掉,同时将原来是第0代的对象位置调整为第1代。当第1代容量也满时执行同样的操作,将没有标记的对象内存释放掉然后将第1代对象位置调整为第2代。
 
三、       文件流 (I/O)
文件是一些具有永久存储及特定顺序的字节组成的一个有序的具有名称的集合。而文件流就提供了一种以流的方式向文件中读取和写入的方法。
    对文件操作的类有:   
类名
常用方法
Directory
CreateDirectory创建指定路径
Delete删除指定路径
Exists判断路径是否存在
GetCurrentDirectory获得当前应用程序工作路径
GetDirectories获得指定路径的目录名称
DirectoryInfo
Create创建目录
Delete删除目录
Exists判断路径是否存在
FileInfo
Create创建文件
Exists文件是否存在
Directory获取
Length当前文件大小
Name当前文件名
File
AppendAllText将指定字符追加到文件中
Copy将现有文件复制到新文件
Create在知道那个路径中创建文件
Delete删除文件
ReadAllLines读取文件中所有行
WriteallLines向文件中写入字符
Exists判断指定文件是否存在
Path
Combine合并两个路径字符串
GetDirectoryName返回指定路径字符串目录
GetFileName返回指定路径字符串文件名和扩展名
 
    Stream
       Stream是所有流的抽象基类,流是字节序列的抽象概念。流涉及三个基本操作:
          1 读取   读取就是从流到数据结构的数据传输
          2写入    写入就是从数据结构到流的数据传输
          3流可以支持查找 查找是对流当前位置进行查询和修改
    FileStream
       使用FileStream类对文件系统上的文件进行读取,写入,打开和关闭操作。
 项目:文件资源管理器 (代码见FileManage和课堂练习文件夹中的NetFramework8_2)
 
四、       多线程和网络编程
操作系统使用进程将它们正在执行的不同应用程序分开,线程是操作系统分配处理器时间的基本单位,一个进程可以有多个线程同时执行。
当有多个程序同时执行时,处理器会为每一个进程分配一定的时间片,每一个时间片内处理器处理一个任务,当该时间片结束时处理器开始处理另一个程序,由于时间片一般很短,所以看起来似乎是多个程序在同时执行,所有程序结束后它们用的时间并没有减少。
.NETThread创建并控制线程。
名称
说明
Abort
终止当前线程
Join
阻塞调用线程,直到某个线程终止时为止
Sleep
将当前线程阻塞指定的毫秒数
Start
使线程开始执行
可以为线程分配一下任何一个优先级值:
   Highest    AboveNormal   Normal   BelowNormal    Lowest
线程状态:
名称
说明
Initialized
表示该线程已经初始化但尚未启动
Ready
线程等待下一个可用的处理器
Running
表示当前线程正在使用处理器
Standby
表示该线程将要使用处理器,一次只能有一个线程处于此状态
Terminated
表示该线程已经完成执行并已退出
Wait
表示该线程正在等该处理器资源
Transition
表示该线程在可以执行前等待处理器之外的资源
Unknown
线程的状态未知
 
小例子:
        static Thread Trtest1;
        static Thread Trtest2;
        static void Main()
        {
            #region MyRegion
            ParameterizedThreadStart ts = new ParameterizedThreadStart(Write1);
            Trtest1 = new Thread(ts);
 
            ThreadStart ts1 = new ThreadStart(WriteLine2);
             Trtest2 = new Thread(ts1);
            
            Trtest1.Start("ss");
             Trtest2.Start();
         
           #endregion
 
        }
        public static void Write1(object o)
        {
            for (int i = 0; i < 100; i++)
            {
                Console.ForegroundColor = ConsoleColor.Green;
                if (i == 50)
                {
                    Trtest2.Join();  //不是Trtest1
                }
                Console.WriteLine(i+"Wtite1"+"----"+o);
            }
        }
        public static void WriteLine2()
        {
            for (int i = 0; i < 100; i++)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine(i.ToString() + "WriteLine2");
              //  Thread.Sleep(500);
            }
        }   Monitor类通过向单个线程授予对象锁来控制对对象的访问。对象锁提供限制访问代码块的能力。
   
名称
说明
Enter
在指定对象上获取排他锁
Exit
释放指定对象上的排他锁
Pulse
通知等待队列中的线程锁定对象状态的更改
PulseAll
通知所有的等待线程对象状态的更改
TryEnter
试图获取指定对象的排他锁
Wait
释放对象上的锁并阻止当前线程,直到它重新获取该锁