image.png

什么是类型

image.png
●为什么要买内存大的计算机?程序运行,必须要硬盘加载到内存中才能运行。(内存:计算机运行的空间)
●硬盘是如何存储的?
●C#强类型语言,受数据类型约束强。
● dynamic类型:C#对弱类型的模仿
image.png image.png

类型在C#语言中的作用

image.png

●程序所处状态:

静态时期:编辑器和编译期

写代码的时候,拿编译器编译的时候都没有运行起来

动态时期:运行期

一旦执行起来,调试Dubug

举例说明:

  1. using System;
  2. using System.Windows.Forms;
  3. using System.Reflection;//反射相关
  4. namespace TypeSampleS
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. Type myType = typeof(Form);
  11. //PropertyInfo需要using System.Reflection;
  12. PropertyInfo[] pInfos = myType.GetProperties();
  13. MethodInfo[] mInfos = myType.GetMethods();
  14. //可在程序动态的时候找到属性、方法、事件等...
  15. Console.WriteLine(myType);
  16. Console.WriteLine(myType.FullName);
  17. Console.WriteLine(myType.BaseType.FullName);
  18. foreach (var p in pInfos) //打印出属性
  19. {
  20. Console.WriteLine(p.Name);
  21. }
  22. foreach (var m in mInfos) //打印出方法
  23. {
  24. Console.WriteLine(m.Name);
  25. }
  26. }
  27. }
  28. }

●内存相关

●运行程序:静态 > 动态 的切换。实际上就是从硬盘装载到内存里。
●程序在内存中,怎么利用内存?分为两个区域:Stack(栈)、Heap(堆)。
○栈作用:方法(函数)调用 很小(一般几兆);
小且快(爆掉的情况:①算法没写好,函数调用太多;②栈上分配太多的内存->栈溢出)
○堆作用:存储对象 很大(一般几个G)
(内存泄漏:分配对象但没回收对象,造成内存浪费,学名“内存泄漏”)
对比C++与C#在内存泄漏上的区别:(C#比C++安全很多)
①C++忘记回收内存,是真的内存泄漏了。
②C#有“垃圾收集器”的机制,不用手动释放内存,当它发现一旦没人使用内存,自动收回。
○栈和堆在实例上的应用:
image.png ← 栈 直接切走(爆掉)案例

  1. namespace TypeSampleS
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. BadGuy bg = new BadGuy();
  8. bg.BadMethod();
  9. }
  10. }
  11. class BadGuy
  12. {
  13. //会很快爆掉:每调一次,都需要在栈上切出一块内存来存储x变量
  14. public void BadMethod()
  15. {
  16. int x = 100;
  17. this.BadMethod();//递归调用自己
  18. }
  19. }
  20. }

○堆内存泄露案例及分析
image.png
image.png(←案例 分析↓)
分析操作:主界面Win+R,输入perfmon 进入 性能监视器;点击“+”,找到Process,在其下方找到Private Bytes,Add(添加),点击确定即可开始观察分析。
问题:红线始终在顶上?超出可表示的容量
1650859145(1).png
1650859014(1).png

●进程(Process):用硬盘加载到内存之后,形成进程。(程序运行的实例)
●实例永远分配在堆里。