问题标签 [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 投票
3 回答
2082 浏览

c# - 尽管数据表存储在缓存中,但我是否必须在每次使用后调用 dispose?

简单案例:

我在缓存中放了一个数据表

现在的问题是:我是否应该在每次调用时调用 table.dispose(),尽管它存储在缓存中?意味着对象总是相同的?或者缓存每次都会创建一个副本?

谢谢 :)

0 投票
5 回答
830 浏览

c# - 处理这个对象就够了吗?还是我需要做更多?

我有这个代码: -

我是否需要在离开该处置范围之前放置这行代码..还是已经处置“调用”了。

0 投票
7 回答
56840 浏览

c# - 在 C# 中使用 IDisposable 与析构函数有什么区别?

我什么时候在类上实现 IDispose 而不是析构函数?我读了这篇文章,但我仍然没有抓住重点。

我的假设是,如果我在一个对象上实现 IDispose,我可以显式地“破坏”它,而不是等待垃圾收集器去做。它是否正确?

这是否意味着我应该始终明确地在对象上调用 Dispose?有哪些常见的例子?

0 投票
4 回答
1454 浏览

.net - 包含 using 语句的单元测试方法

我想知道单元测试和 using 语句是否真的可以齐头并进,因为没有办法模拟在 using 语句中实例化的一次性对象。我如何能够有效地对包含以下 using 语句的方法进行单元测试?

当您进行单元测试时,是否完全禁止使用语句?

任何意见表示赞赏。

0 投票
2 回答
465 浏览

c# - Winforms:删除Visual Studio for Windows Forms创建的自动创建的Dispose()方法中的代码是否安全

背景

在 Visual Studio 2008 中创建一个新的 Windows 窗体应用程序,这将创建一个带有名为“Form1”的类的骨架项目。VS2008 会自动创建一个 Dispose() 方法。

我走进一个同事的办公室(一位高级开发人员) - 很棒的人,聪明,良好的聊天设计技巧 - 但我注意到他在输入什么 - 当他浏览代码库时,他删除了 VS2008 创建的 Dispose() 方法的这一部分对于表格。

所以,我问他为什么,他说没有必要保留它。

问题

  • 删除此代码是否安全?
  • 将其留在或删除它的优点/缺点是什么?
0 投票
4 回答
8751 浏览

c# - 正确处理 DbConnection

我有一个名为 DatabaseHelper 的类,它包装了一个 DbConnection。为 using 语句设置此类的正确方法是什么?我已经实现了 IDisposible,但我不确定应该在何时何地调用 Connection.Close() 或 Connection.Dispose()。

当我在自己的 Dispose() 方法中简单地调用 Connection.Dispose() 时,有时我会从我的 DbConnection 对象中得到一个 SocketException。我认为这是因为旧连接处于打开状态,但没有附加到异常的详细信息,所以我不能确定。

0 投票
1 回答
513 浏览

vb.net - 收容树?

好的,我认为我理解 IDipose,但只是阅读了 Accelerated VB.NET 的最佳实践部分,它指出“该对象不包含任何实现 iDispose 的对象,因此您不需要遍历调用 iDispose 的包含树”

这个“收容树”是程序所知道的他已经使用然后破坏的东西,还是当我破坏一个对象时我应该查看一个包含类/集合?

0 投票
3 回答
4200 浏览

c# - Application.Run 抛出 ArgumentException 未处理

我有一个需要关闭应用程序的情况,所以我在设置一个 certian 标志时调用 this.Dispose ()。

起初我以为是调用 this.Dispose() 后调用函数的问题,所以我将代码移动到最后调用的东西,但我仍然得到“ArgumentException was unhandled”“Parameter is not valid”。在 Application.Run(new myApp(); 行。

我究竟做错了什么?一路上我错过了什么吗?或者也许有更好的方法来关闭应用程序?

0 投票
9 回答
22501 浏览

c# - 如何异步处理?

假设我有一个实现IDisposable接口的类。像这样的东西:

http://www.flickr.com/photos/garthof/3149605015/

MyClass使用一些非托管资源,因此IDisposable的Dispose()方法会释放这些资源。MyClass应该像这样使用:


现在,我想实现一个异步调用DoSomething()的方法。我向MyClass添加了一个新方法:

http://www.flickr.com/photos/garthof/3149605005/

现在,从客户端来看,MyClass应该像这样使用:

但是,如果我不做任何其他事情,这可能会失败,因为对象myClass可能在调用DoSomething()之前被释放(并抛出意外的ObjectDisposedException)。因此,对Dispose()方法的调用(隐式或显式)应该延迟到对DoSomething()的异步调用完成。

我认为Dispose()方法中的代码应该以异步方式执行,并且只有在所有异步调用都被解决后。我想知道这可能是实现这一目标的最佳方式。

谢谢。

注意:为了简单起见,我没有详细介绍 Dispose() 方法是如何实现的。在现实生活中,我通常遵循Dispose 模式


更新:非常感谢您的回复。我感谢你的努力。正如chakrit 所评论的,我需要对异步 DoSomething 进行多次调用。理想情况下,这样的事情应该可以正常工作:

我会研究计数信号量,这似乎是我在寻找的东西。这也可能是设计问题。如果我觉得方便,我将与您分享一些真实案例以及MyClass的真正作用。

0 投票
9 回答
1325 浏览

c# - 在我无法明确调用 Dispose() 的语句中间创建的 IDisposable 对象会发生什么?

假设我正在使用 Sharepoint(这也适用于其他对象模型),并且在我的陈述中间,我调用了一个方法,在本例中为“OpenWeb()”,它创建了一个 IDisposable SPWeb 对象。现在,我无法在 SPWeb 对象上调用 Dispose(),因为我没有对它的引用。 那么我需要担心这种泄漏的内存吗?

我知道我可以将语句分成多行并获取 SPWeb 引用来调用 Dispose:

请记住,我的问题不是关于美学,而是关于 IDisposable 对象发生了什么,我无法明确调用 Dispose(),因为我没有参考。

很抱歉我第一次问这个问题时不够清楚。从那以后我改写了它。感谢您迄今为止的所有回复。