【问题标题】:Do i need to free the memory after using a string list with object type使用对象类型的字符串列表后是否需要释放内存
【发布时间】:2015-09-05 08:02:04
【问题描述】:

我想创建一个可以收集任何类型数据(字符串、整数、浮点数)的集合类。所以我决定使用List<object> 结构来存储任何类型的数据。

由于使用 List 结构比创建非托管数组更安全(托管),所以我想创建一个 List 结构,以便它可以保存任何类型的数据......但我有些担心,如果我创建一个 List<object>结构并尝试保存一些字符串,由于字符串类型可能存在内存泄漏..

所以在使用(清空)List 并单独解除分配字符串后我是否必须做一些事情,或者 .Net 是否已经处理了...

有没有更好的方法来创建通用集合类?

【问题讨论】:

  • 使用 Java 进行内存管理的可能答案:stackoverflow.com/questions/1567979/how-to-free-memory-in-java
  • 尝试使用动态列表,看看是否有帮助。 stackoverflow.com/questions/6600810/…
  • 是什么让您认为使用string 类型会导致.Net 中的内存泄漏? .Net 将代表您处理内存的释放和清理,在这种情况下您无需考虑。
  • 你好像有点误会了。如果你在 C# 中创建一个数组(例如string[]),它不是“unmanaged”。垃圾收集器管理数组。

标签: c# string list object memory


【解决方案1】:

只要你真的需要,你就不需要自己收集任何对象,但根据你的帖子,这里不是这种情况,实际上这只在少数情况下是必要的(你可能看@ 987654321@这些情况可能是什么)。 但是,.NET 会释放任何不存在引用的内存(如果您有一个 int、一个字符串或任何自定义对象,则为独立),因此如果您离开数组、列表或任何您使用包含的元素的范围,将在某些时候被消除GC 提供了一个不确定的时间点,但你不会关心这个。

托管和非托管的意思可能是这样一个事实,即 List 更具动态性,因为它可以根据当前元素的数量来改变其大小。如果此数字超过给定的最大值,则列表会自动增加给定的因子。然而,数组的大小是固定的。然而,术语“非托管”依赖于 C++,例如,C#-Code 始终是托管代码(这意味着有一个垃圾收集器,例如)。见Wikipedia on Managed Code

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多