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

sharepoint - SPWeb.Site,你应该调用 Dispose() 吗?

更新于 2009 年 6 月 8 日 15:52简答NO原始问题:

我找不到任何关于SPWeb.Site处置指导的参考资料。我浏览了一些关于处置 SharePoint 对象的更流行的最佳实践文档:

不幸的是,这些指南都没有提到 SPWeb.Site。为了给出一些上下文,我正在编写一个公共扩展 API,它接受 SPWeb 作为方法的参数,即:

我在 SPWeb 的反射器中查看了 Close() 方法,该方法由 SPWeb.Dispose() 调用,其中没有任何内容表明实际的 SPSite 成员字段已被处理。

更新:2009 年 6 月 8 日 13:47

亚历克斯的建议下

“将其放入一个运行 100 次的循环中,并使用在 WSS v3 和 MOSS 2007 中排除 SPSite/SPWeb 泄漏中描述的 SPRequestStackTrace 注册表项来检查您的测试代码是否是问题的根源。”

我运行了 webpart 中包含的以下代码:

SharePoint 日志中未显示任何内容。

虽然我会犹豫从这个幼稚的实验中得出任何真正的结论,但这表明没有必要处置 SPWeb.Site。如果能从对此主题更了解的人那里得到具体的回答,那就太好了。

更新:2009 年 6 月 8 日 14:52 由 Greg 的评论提示,我计算出了 m_Site 的分配,看起来它最终总是通过内部构造函数传递给 SPWeb。例如,SPWeb.OpenWeb 将其传递new SPWeb()。所以我更确定 SPWeb.Site 不应该处置,如果是的话,确实会导致问题。

0 投票
4 回答
16082 浏览

c# - 何时在 WPF 应用程序中调用 Dispose() 方法

我有一个简单的 WPF 单窗口应用程序,其中包含文本框和按钮。而且我还在WPF窗口中使用了Windows Forms的NotifyIcon和DateTimePicker。如何有效地处置所有控件?

0 投票
1 回答
224 浏览

.net - sendasync(smtpclient)在使用令牌时发送byval而不是byref?

在使用反射器查看之后,函数参数中带有对象令牌的 sendasync(smtpclient) 似乎是 byval

尝试在回调函数中释放附件有意义吗?

到处都有人(包括我自己)似乎在做 sendasync(mailmessage,mailmessage)

并在回调(SendCompletedCallback)中执行以下操作:

但是由于 sendasync 是 byval,所以不应该处理原始附件,对吗?

就我而言,附件是内存流

0 投票
3 回答
137 浏览

.net - 需要明确关闭?

我正在使用 EntLib 4.1。

执行任务后,我是否需要处理 _db 对象,例如:

... 或者 EntLib Framework 会自动处理它吗?

0 投票
1 回答
1275 浏览

powershell - 在进程终止之前未能关闭/处置 Powershell Runspace 对象有什么影响?

给定一个应用程序在应用程序的生命周期内维护一个运行空间对象的单例实例(来自 System.Management.Automation.Runspaces),在应用程序终止之前未能处置运行空间的潜在副作用是什么?

我提出的设计原理是内存/句柄泄漏在这种情况下不是问题,因为进程终止无论如何都会强制释放所有这些资源,并且单例与应用程序具有相同的生命周期。该设计是否忽略了其他考虑因素?

0 投票
1 回答
1312 浏览

interop - 如何通过 IronPython 的互操作程序集处理正在使用的 VB6 COM 对象?

我通过 IronPython 中的 .NET 互操作程序集使用第三方 COM 组件,如下所示:如何在 IronPython 中使用 VB6 COM 'reference'?

我在这方面的经验非常棒,无缝运行的东西给我留下了深刻的印象......除了一件事。

第 3 方 COM 组件使用 Microsoft 的 DAO 库(不确定是什么版本)来处理由另一个第 3 方应用程序创建的数据库。问题是在我的程序运行时重新创建了这个数据库文件,我想“取消初始化”这个 COM 对象。特别是,在我第一次运行我的例程时,运行我的代码(访问 COM 组件的属性、调用它的方法等)运行良好。但是,下一次第三方 COM 组件会显示一个消息框,说明数据库(MSAccess 95 .mdb 文件)已在使用中,并提供重试选项。按重试可以可靠地工作,因此主要问题是出现此对话框。

所以,我的理论是 COM 组件正在向数据库泄漏句柄,我找不到要调用的“清理”方法。我试过.Dispose()了,但没有奏效。

我最后的手段是使调用 COM 对象的代码成为一个单独的 IronPython 进程,该进程通过 std in/out 与我的主进程交互,因为 COM 对象所服务的角色更像是“立即给我所有这些信息”用例而不是持续需要的依赖。

我希望避免这种情况,因为我不熟悉 COM(或者真的,.NET)我只能希望我错过了一个明显的.Dispose方法或类似的东西。

如果没有干净的方法,我可以从我的进程中强制卸载程序集,类似于FreeLibrary本机代码中的重复调用吗?(我保证我的代码将不再使用该对象,所以我不必担心我的部分缺少引用导致内存保护错误)


编辑:

我无法解决这个问题,所以我采用了进程外方法,并在我的子批处理关闭时让 Windows 清理。

0 投票
1 回答
148 浏览

.net - Why doesn't parent object fail with a previously disposed child object?

Potentially embarrassing question, but there is obviously something I'm missing that I want/need to know.

I expect the following code to create a new table row with new cells to be rendered later. And that's what it does ... as you would expect.

But .... but aren't the TDs created in the using statements invalidated once they go out of the 'using' scope? Wouldn't the TD objects referenced by the row now be invalid and shouldn't the row fail when it attempts to use them? The same could be said for the TR when it's rendered by the 'tbl' object.

Do I not understand dispose?

Do I not understand using?

Is TableRow.Cells.Add() actually doing a deep copy not just a ref ptr copy?

Can the TableCell actually be used after it's disposed?

What gives?

0 投票
1 回答
485 浏览

sharepoint - SharePoint 中的跨方法处置模式

我编写了一个对 SharePoint 网站内容进行各种修改的类。在那个类中,我实现了一个惰性解析属性

SPSite 和 SPWeb 都需要处置,根据最佳实践文档,这种情况称为跨方法处置模式......只是他们没有就如何实现模式的处置部分给出任何实际建议。

我选择让我的班级实现 IDisposable(在那里放置网站和 Web),并让调用者通过using子句访问它。那是根据“最佳实践”,还是我应该以不同的方式处理问题?

请注意,我来自严格的引用计数背景,所以如果我对垃圾处理的看法有点偏离,请纠正我。

0 投票
1 回答
171 浏览

.net - 通过调用自己的 BeginInvoke() 来处理控件

通过调用自己的 BeginInvoke() 来处理控件是个好主意还是坏主意?或者我应该使用父控件或类似的东西来完成这项任务?

我正在使用 Invoke,因为我正在从另一个线程访问控件。

0 投票
2 回答
274 浏览

.net - VB/C#:在全局范围内放置一次性对象:可以吗?

作为优化,我决定在全局范围内放置一个我经常需要的对象 - 具有整个关卡的预渲染图像的 SDL 表面(称为 S_AreaBMP)。
现在不必每帧都在 DrawScreen 函数中创建和销毁它。我只需要在加载新关卡或 GFX 表时处理和更改它,我通过此函数执行此操作:

(AreaBMPExists 和 S_AreaBMP 是全局范围)

问题:这从根本上说是合理的吗?

效果很好,但是我不禁觉得这种事情是不鼓励的......