.net垃圾收集和托管资源

Mas*_*low 4 .net performance garbage-collection memory-leaks memory-management

来自原始数据类型(int,char等)的内存是在它们离开作用域后立即释放,还是添加到垃圾收集中以供以后发布?

考虑:

For x as integer=0 to 1000
dim y as integer
Next
Run Code Online (Sandbox Code Playgroud)

如果这不会将垃圾收集器中的1000个整数添加到以后清理,它如何处理字符串对象?这会创建1000个字符串以便以后清理吗?

For x as integer=0 to 1000
dim y as string=""
Next
Run Code Online (Sandbox Code Playgroud)

如何只包含int,string等...数据类型的结构?

仅包含托管资源的类?

Jon*_*eet 7

好的,只有两个答案,已经有错误信息...

  • 字符串不是基本类型
  • 字符串不是值类型
  • 值类型值并不总是在堆栈上创建 - 它取决于变量的位置.如果它是类的一部分,它将与该对象的其余数据一起存储在堆上.
  • 如果它们被捕获,甚至局部变量也可以在堆上结束(例如,在匿名函数和迭代器块中)
  • 诸如""之类的字符串文字被实习 - 它们总是解析为相同的字符串.该循环实际上不会创建任何字符串.

有关更多信息,请参阅我的文章,了解.NET内存中的内容.您可能还想考虑它是否重要.

  • 不,不是:http://msdn.microsoft.com/en-us/library/system.type.isprimitive.aspx"原始类型是布尔,字节,SByte,Int16,UInt16,Int32,UInt32,Int64,UInt64, IntPtr,UIntPtr,Char,Double和Single." 我相信VB规范:) (2认同)