【问题标题】:using classes and managing memory in vb.net在 vb.net 中使用类和管理内存
【发布时间】:2015-02-26 12:59:36
【问题描述】:

我有一个关于使用类和内存使用的问题。 我正在努力学习更多地使用课程。

dim test as class1
for i as integer = 0 to 10
test = new class1
test.attribute = i
next

上面的代码会给我留下类“class1”的多个实例吗? 我是这样,我如何在设置新课程之前销毁课程? 还是设置“test = new class1”会破坏前一个?

我试过从内存使用情况来计算,但我不能。

这门课不是一次性的,所以我做不到

for i as integer = 0 to 10
using test as new class1
test.attribute = i
end using
next

【问题讨论】:

  • 您正在覆盖不是对象而是对它的引用的变量的值。前一个对象已准备好被垃圾回收,因为它不再被引用。您不需要处置它,因为它不包含非托管资源。所以实际上第一个代码绝对没问题,除了你没有对对象做任何事情。如果您将它们添加到列表中,它们仍会被引用,因此不会被垃圾收集器触及。
  • 好的,如果我在他的类中定义一个列表,然后在循环中将它们添加到列表中,我会得到很多类的实例吗?例如,如果我正在创建一个包含约 1.000 个对象实例的大型 json/xml 文件,例如说它是一个电影数组。我应该在序列化它之前执行“将电影列表作为新列表(电影)”并将我的电影类的所有 1.000 个实例添加到它,还是会导致使用大量内存?如何更好地做到这一点?我目前正在创建一个 json 文件,其中包含一个包含我的类的 20.000 个实例的数组...
  • 1000 个对象不需要大量的内存。不要(过早地)优化不需要优化的代码。

标签: .net vb.net memory memory-management memory-leaks


【解决方案1】:

没有。该代码不会给您留下 class1 的多个实例。每次使用

创建一个新实例
test = New class1

旧实例超出范围,它的内存迟早会被垃圾收集器回收(如果其他东西需要内存,则更快)。

请注意,有一种特殊情况,即 class1 拥有任何非托管资源并实现 Dispose 方法。在这种情况下,您应该在完成后调用该对象的 Dispose。

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 2014-03-21
    • 2012-03-19
    • 2017-08-09
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2021-01-23
    相关资源
    最近更新 更多