问题标签 [idisposable]

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 回答
1019 浏览

asp.net-mvc - ASP.NET MVC ViewResult 问题

让您的 ASP.NET MVC ViewResult 类实现 IDisposable 是否合法?我的自定义视图结果有一个流成员,我想保证它在流回客户端后关闭。ASP.NET MVC 在 ViewResult 实现上是否尊重 IDiposable?

谢谢!

0 投票
7 回答
7597 浏览

c# - 如何处理调用了异步方法的对象?

我有这个PreloadClient实现的对象IDisposable,我想处理它,但是在异步方法完成它们的调用之后......这没有发生

那么,有什么想法或解决方法吗?

0 投票
1 回答
311 浏览

asp.net - 在不使用 HttpModule 的情况下处理声明性的每个请求数据

我有一个“上下文”对象,它通过静态 Current 属性将自身与 HttpContext.Items 联系起来。这个对象可以通过表达式构建器和控件直接使用,它们都是同一个库的一部分。

我遇到的问题是,当请求结束而不使用 HttpModule 时,我想处置它的托管资源(WCF 客户端)(因为否则不需要)。我已经实现了完整的一次性模式(使用 Finaliser),但是您不能及时依赖 GC 终结实例。

我试图在对象构造函数中为 HttpApplication.EndRequest(也是 PostRequestHandlerExecute)订阅一个静态方法(锁定以确保它只发生一次),但该事件永远不会被调度。这可能是因为 HttpApplication 的实例发生了变化,尽管我不完全确定。

关于解决这个问题的最佳方法有什么想法吗?

0 投票
1 回答
1056 浏览

asp.net - HttpContext.Current.Session 中的 IDisposable 对象是否部署在 Application_End 上?

我正在使用存储在数据库中的 SessionObject。SessionObject 封装在实现 IDisposable 的 SessionObjecWrapper 中。然后将 SessionObjectWrapper 放置在 HttpContext.Current.Session 中。

在会话到期时,ASP.NET 是否会“处理”(或让 GC 这样做)会话内的任何对象?

在应用程序关闭时?

我正在对此进行测试,但我没有看到这种情况发生。我应该如何以一种干净的方式做到这一点?

0 投票
7 回答
11656 浏览

c# - 你如何协调 IDisposable 和 IoC?

我终于在 C# 中围绕 IoC 和 DI 进行了研究,并且正在努力解决一些问题。我正在使用 Unity 容器,但我认为这个问题适用范围更广。

使用 IoC 容器来分配实现 IDisposable 的实例让我大吃一惊!你怎么知道你是否应该 Dispose()?该实例可能只是为您创建的(因此您应该 Dispose() 它),或者它可能是一个其生命周期在其他地方管理的实例(因此您最好不要)。代码中没有告诉你,事实上这可能会根据配置而改变!!!这对我来说似乎是致命的。

任何 IoC 专家都可以描述处理这种歧义的好方法吗?

0 投票
2 回答
609 浏览

.net - 如何正确使用实现 IDisposable 的静态属性?

举个例子:

这不是一个好主意,因为它是静态的。下次您的应用程序使用 Brushes.Black 时,您将遇到问题,因为它已被释放。

现在,如果您只使用 Brushes.Black,那么不处理它可能是可以的,因为您只会留下一个非托管资源(希望如此!)。

但是,一般来说,您应该避免使用大量静态 IDisposables,还是我遗漏了什么?

0 投票
2 回答
1427 浏览

.net - 何时使用异步模式处理 wcf 对象

假设我从同步版本开始:

我结束了

1) 这是调用 Dispose() 的正确位置吗?

2)有没有办法使用 using() ?

0 投票
8 回答
1940 浏览

c# - IDisposable、Finalizers 和非托管资源的定义

我正在努力确保我的理解IDisposable是正确的,并且有些事情我仍然不太确定。

IDisposable似乎有两个目的。

  1. 提供按需“关闭”托管对象的约定。
  2. 提供一个约定以释放托管对象持有的“非托管资源”。

我的困惑来自于确定哪些场景有“非托管资源”在起作用。

假设您正在使用 Microsoft 提供的IDisposable实现(托管)类(例如,与数据库或套接字相关的)。

  1. 你怎么知道它是IDisposable只为上面的1还是1&2实现的?
  2. 您是否负责确保释放内部可能持有或不持有的非托管资源?您是否应该向您自己的调用 instanceOfMsSuppliedClass.Dispose() 的类添加终结器(这将是正确的机制吗?)?
0 投票
2 回答
1051 浏览

idisposable - 拥有托管一次性资源的 IDisposable 基类,在子类中做什么?

我有一个拥有托管一次性资源(.NET PerformanceCounter)的基类。我了解在类上实现 IDisposable 以便我可以在资源上显式调用 Dispose。从我看到的示例中,人们通常使用私有布尔成员变量“disposed”并将其在 Dispose 内部设置为 true。稍后,如果尝试访问公共方法或属性,如果“disposed”为真,则会引发 ObjectDisposedException。

在子类中呢?子类如何在其公共方法和属性中知道它们已被释放?起初我认为子类不需要任何特殊的东西(比如实现他们自己的 Dispose 版本),因为需要处理的东西只在基类中(假设子类不会添加任何数据需要显式处理)并且基类的 Dispose 应该处理它。子类是否应该仅仅为了设置自己的“已处理”成员变量而重写基类的虚拟 Dispose 方法?

这是所讨论的类层次结构的一个非常精简的版本。

在我们的系统中,ReadableCounter 和 WritableCounter 是 BaseCounter 的唯一子类,它们只是通过代码生成过程再被子类化到一个级别。附加的子类级别只添加了一个特定的名称,以便可以创建直接对应于命名计数器的对象(例如,如果有一个计数器用于计算生成的小部件的数量,它最终被封装在一个 WidgetCounter 类中. WidgetCounter 包含允许创建“WidgetCounter”性能计数器的知识(实际上,只是作为字符串的计数器名称)。

只有代码生成的类被开发人员直接使用,所以我们会有这样的东西:

因此,您会看到基类拥有并管理 PerformanceCounter 对象(它是一次性的),而子类使用 PerformanceCounter。

如果我有这样的代码:

WritableCounter 如何以增量方式知道它已被处置?ReadableCoutner 和 WritableCounter 是否应该简单地覆盖 BaseCounter 的

像这样的东西:

只是设置一个 ReadableCounter/WritableCounter 级别的“disposed”成员变量?

如果基类(BaseCounter)声明为受保护(或使其成为受保护的属性)呢?这样,子类可以引用它,而不是仅仅为了记住 Dispose 已经发生而添加 Dispose 方法。

我错过了这艘船吗?

0 投票
7 回答
23618 浏览

.net - 如何处理从 Dispose 抛出的异常?

最近,我正在研究一些关于未处理对象的棘手错误。

我在代码中发现了一些模式。据报道,一些 m_foo 没有被释放,而 SomeClass 的所有实例似乎都被释放了。

我怀疑 Foo.Dispose 可能会引发异常,因此不会执行以下代码,因此不会释放 m_bar。

由于 Foo/Bar 可能来自第三方,因此不能保证不抛出异常。

如果只是用 try-catch 包装所有 Dispose 调用,代码将变得笨拙。

处理这个问题的最佳做法是什么?