技术开发 频道

浅析C#编程中的内存管理

  首先,声明一个Customer:customer1,在堆栈上给这个引用分配存储控件。请注意:仅仅是给这个引用分配存储空间,并不是实际的Customer对象。customer1占用4个字节的空间(32位机),来表示Customer对象在内存中的地址。

  然后,执行第二行代码,完成以下操作:

  在堆上分配存储空间,用来存储Customer对象,注意:这里是Customer对像。
 
  将变量customer1的值设为分配给Customer对象的内存地址从这个例子中可以看出,建立引用类型的变量的过程要比奖励值类型变量的过程复杂,且不避免的有性能的降低。但是,我们可以将一个引用变量的值赋给另一个引用变量,当一个变量出作用域时,它会从堆栈中删除,但是对象的数据仍然保留在内存中,知道程序停止。

  这样,我们在将一个引用变量A传递给函数时,仅仅是将变量A的引用传递给了函数,即:仅仅是在堆栈上分配内存,即变量B两者指向同一个内存地址。因此,当变量B发生变化时,变量A也会发生变化。

  4、装箱和拆箱

  装箱和拆箱就是值类型和引用类型的项目转化,装箱可以将值类型转化为引用类型,拆箱的作用正好相反,经引用类型转化为值类型。

  5、垃圾收集

  一般情况下。NET运行库会在认为需要的时候运行垃圾收集器来释放托管资源,这在大多数情况下,足够了。就是说我们没有必要去关心内存。但在有的情况下,我们会强制垃圾回收集器在代码的某个地方运行,释放内存。这就用到了System.GC.Collect()。System.GC表示一个垃圾收集器。这种情况很少,例如:代码中大量的对象刚刚停止引用,就适合调用垃圾收集器。

0
相关文章