问题标签 [dispose]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
176 浏览

c# - 在这种情况下我应该担心释放资源吗?

假设我有一个包含项目列表的类 Collection。

我有这个 Collection 类的几个实例,它们都有不同的 MyLists 但共享一些项目。例如:有 10 个 Item,Collection1 引用 Items 1-4,Collection2 在其 List 中有 Items 2-8,Collection3 有 4、7、8 和 10。

我按如下方式实现了这一点:我有一个全局列表,其中包含任何可用的项目。在创建新集合之前,我会检查此列表中是否已经存在我需要的项目——如果没有,我将创建项目并将其添加到全局列表(当然也添加到集合中)。

我看到的问题是这些项目永远不会被释放——即使所有集合都消失了,它们消耗的内存仍然没有被释放,因为全局列表仍然引用它们。这是我需要担心的事情吗?如果是这样,我该怎么办?我想在全局列表中添加一个计数器,以查看何时不再需要某个 Item 并删除它的引用。

编辑: 我认为这实际上是一个设计问题。我将放弃全局列表的想法,而是遍历所有集合,看看它们是否已经拥有所需的项目。

0 投票
3 回答
802 浏览

winforms - 我是否必须在覆盖的 dispose 函数中调用 windows 窗体中控件的所有公开的 dispose 函数?

我有一个包含许多控件的 windows 窗体,例如计时器、gridviews 和绑定源等,所有这些都公开了一个 dispose 函数。我是否必须在此调用他们的 dispose 函数

还有 components.Dispose() 到底是做什么的?

谢谢

0 投票
6 回答
1125 浏览

vb.net - 分配给 Nothing 会导致调用 Dispose 吗?

我最近看到一些 VB .NET 代码如下:

将 Nothing 分配给服务是否有任何作用?如果是垃圾收集问题,我假设当“服务”超出范围时,引用的对象将被垃圾收集,并且在对象上调用 dispose 方法。

在我看来,分配这个变量 Nothing 真的不能做任何事情,因为周围可能有另一个对该对象的引用,所以无论如何都要检查引用计数。

0 投票
4 回答
11745 浏览

vb.net - service.close() 与 service.abort() - WCF 示例

在其中一个 WCF 教程中,我看到了以下示例代码:

这是确保即使在错误条件下也能释放资源(即连接)的正确方法吗?

0 投票
4 回答
3433 浏览

c# - (.net) CriticalFinalizerObject - 它到底有什么作用?

我对这个类的理解是,当你想确定类的终结器(析构函数)被调用时,你应该使用它,但从我做的几个测试来看,这似乎不是真的。如果它不能确保调用 dispose 方法,还有其他方法吗?例如,如果我想确保运行某些代码来结束我的对象,即使我通过任务管理器或其他方式关闭了我的程序?

0 投票
3 回答
3792 浏览

c# - C# .NET Linq 内存清理或泄漏?

我有一个 2GB 的大文件,有 150 万个列表要处理。我正在运行一个控制台应用程序,它执行一些字符串操作,然后将每个列表上传到数据库。

  1. 我创建了一个 LINQ 对象并通过将其分配给每个列表(循环)的新 LinqObject() 来清除该对象。

  2. 对象完成后,我将其添加到列表中。

  3. 当列表达到 100 个对象时,我在整个列表上 submitAll,清除列表,然后重复。

随着程序的运行,我的内存使用量继续增长。我应该做些什么来降低内存使用量?我试过 GC.collect。我想我想使用 dispose..

提前感谢您的关注。

0 投票
3 回答
3098 浏览

c# - 包装 Interop COM 对象时,如何在 c# 中实现 dispose 模式?

我的类包含一个来自 Interop 的对象,并在其上调用一个方法,导致它分配东西。它还公开了一个释放这些东西的方法,所以我希望我应该在 Dispose() 中调用它:

现在,我应该扩展所有内容以遵循 Dispose 模式。我没有其他一次性或非托管资源要释放,因此假设 comInstance 是托管的(这不是 Interop 所做的,将非托管包装到托管中吗?),我认为该模式分解为:

除非我在 MyClass 的实例上显式调用 Dispose(),否则哪些泄漏会导致 Dispose 模式存在缺陷?那么这是否意味着 comInstance 必须是非托管的,并且该模式分解为:

编辑:

  1. 为了避免让我的班级被完整的模式弄得乱七八糟,我可以密封我的班级吗?
  2. 我怎么知道 ComClassName(通常是任何类)是非托管的?
0 投票
1 回答
1442 浏览

c# - close, dispose, finalize, GC, Idisposable,....你对它们有清楚的描述吗?

我对关闭、处置、完成、GC、Idisposable 完全感到困惑。哦,你能把它们的详细描述发给我吗?

0 投票
6 回答
9385 浏览

c# - 什么时候需要 Dispose?

当您有如下代码时:

你必须丢弃笔和刷子吗?bmp和g呢?

我的主要问题是,如果这些要手动处理,为什么不在它们超出范围后立即处理?如果您不手动处理它们,会发生这种情况吗?是延迟让人们手动执行此操作吗?

0 投票
5 回答
4184 浏览

c# - using() 并使用多个包装的流进行处理

如果你正在做例如你只需要一个 using() 用于最外层的流,我是对的吗

由于处置 StreamWriter 还应处置/关闭底层流,因此无需这样做吗?:

(请注意,这些只是示例,关于如何处理包装的流,而不是寻找替代方案,例如使用 StringWriter 等。)