问题标签 [unmanagedresources]

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

c# - 非托管资源和 Dispose()

我正在阅读一些关于Dispose()方法的文章,发现非托管资源应该从Dispose()方法(或 finalize() 方法)中显式释放,并且文章说文件句柄和数据库连接对象是非托管资源的示例。谁能解释为什么这些是不受管理的以及如果在 Dispose() 中处理不当会发生什么?我不知道文件句柄是什么。它们存在于哪里?

0 投票
1 回答
931 浏览

c# - 如何销毁 ICONINFO?

我单步执行代码并在任务管理器中查看进程使用的 GDI 和用户对象的数量。跟踪我在评论中写的代码中的对象数量。我注意到在执行以下代码后,仍然有一个未发布的用户对象和一个未发布的 GDI 对象。我忘了在哪里释放它们?

0 投票
1 回答
433 浏览

scala - 如何仅从编译范围(而不是从测试)中排除非托管资源

在我的一个子项目中,我试图从我的非托管资源列表中排除 *.conf 和 *.groovy 文件:

现在,这可行,但会产生意想不到的效果,即从 Test 中删除 *.conf 文件。我尝试添加以下 includeFilter 设置:

但是,这不起作用。我认为测试和编译之间存在可能导致此问题的关系。任何的意见都将会有帮助。谢谢。

0 投票
1 回答
94 浏览

oop - 在垃圾收集语言中处理非托管资源是否有任何替代概念?

垃圾收集的面向对象编程语言会自动回收未使用的内存,但所有其他类型的资源(即文件、套接字......)仍然需要手动释放,因为无法信任终结器及时(或根本不)运行。

因此,此类资源对象通常提供某种“关闭”“处置”方法/模式,由于多种原因,这可能会产生问题:

  • 必须手动调用Dispose,这可能会在不清楚何时必须释放资源的情况下造成问题(与手动内存管理类似的问题)
  • 一次性模式有点“病毒式”,因为每个包含一次性资源的类也必须是一次性的,以保证正确的资源清理
  • 向类添加一次性成员,要求类也成为一次性成员,改变了类的接口和使用模式,从而破坏了封装
  • 一次性模式会产生继承问题,即派生类是一次性的,而基类不是

那么,是否有任何替代概念/方法可以正确释放此类资源?有这方面的论文/研究吗?

0 投票
1 回答
44 浏览

ios - 您在项目中清理图像资源的方式是什么

我正在我的项目中进行大量清理,摆脱旧的图像资源。我这样做的方法是遍历每个资源并在代码中搜索资源名称的匹配项。你怎么做呢?

0 投票
0 回答
406 浏览

c# - GetManifestResourceStream:DLL 中的 EXE

首先,我在我的 C# 项目中嵌入了一个非托管的 EXE(实际上是 pdftotext.exe)。我写了一个方法来使用传统的调用它:

我工作得很好,直到我决定建立一个库来保存我的所有功能,包括这个。因此,我将非托管 EXE 嵌入到我的新 DLL 中。现在我尝试从我的项目中调用该方法,但它在 byte[ba] 中停止,因为 'stream' 将具有 'null' 值。任何帮助将不胜感激,因为我目前迷路了。

0 投票
2 回答
2478 浏览

wpf - Wpf 托管资源清理

我正在尝试找到一种清理自定义控件可能生成的非托管资源的好方法。该场景是父窗口打开一个子窗口,该子窗口具有带有非托管资源的自定义控件(请参见下面的代码)。当 CustomControl 不再使用时,即当它所在的树被卸载(即子窗口关闭)或从树中移除(即它本身被卸载)时,需要清理这些资源

方法1:卸载事件 当您手动关闭子窗口时触发,但如果您关闭父窗口(然后自动关闭子窗口)则不会触发

方法 2:OnVisualChildrenChanged 当子窗口手动或由父级自动关闭时不会调用此方法,并且仅在将 CustomControl 移动到不同的父元素时使用。

方法 3:Dispatcher.ShutdownStarted 这并没有太大帮助,因为用户可能在完成应用程序之前已经打开/关闭了几个子窗口,并且仅在最后清理内存还不够好。

方法 4:让 CustomControl 订阅 ChildWindow.Closing 这也不够好,.. 控件不必知道它在窗口中。

方法 5:Finalizer 遇到与方法 3 相同的问题,.. 可能需要一段时间才能调用它

0 投票
1 回答
663 浏览

c# - 我应该在本地定义的 IntPtr 变量上使用 CloseHandle 吗?

如果我用这个...

...要在我的 C# .Net4.5控制台应用程序中获取控制台实例并将其分配给一个变量(我在调用 user32 的MessageBox()方法时作为 hWnd 参数传递),当我需要调用 kernel32 的CloseHandle()方法时'完成了非托管变量?

当我尝试这个时,我得到一个 SEHException,我的谷歌搜索似乎表明它与调试模式和早期版本的 .NET 有关。

问题 1 - 我应该使用 CloseHandle,还是留下它让控制台资源自行解决?

问题 2 - SEHException 是完全不相关的,还是因为我试图在它仍然实例化时关闭控制台?


边注

为“菜鸟问题”道歉;我对非托管代码的经验几乎为零。

我知道有更好的方法可以做到这一点;我故意尝试在不导入 Windows.Forms 的情况下这样做

0 投票
1 回答
463 浏览

c# - Asp.net c#文件被另一个进程使用

我正在使用编程语言 C# asp.net 4.0。我有一个上传excel的情况。使用代码将其保存在硬盘驱动器上,然后使用 SqlBulkCopy 我将此 excel 的所有内容转储到数据库中。代码工作正常。

如果程序中的任何地方出现问题,例如我的 excel 文件中有较少/额外的列,如 db 中指定的那样,就会出现问题。异常被触发。我已经处理了异常。

现在,如果我再次使用相同的文件进行上传,则显示文件被另一个进程使用并且代码中断。

此外,即使文件被成功转储。由于同样的原因,我无法上传相同的文件。

发生异常或代码成功运行后,如何释放或清理代码或释放此文件以进行其他处理

0 投票
1 回答
702 浏览

c# - 应该调用 Marshal.FreeHGlobal 还是 LocalFree?

看到一段代码,不确定是否需要释放内存。如果我在下面有这个块:

我需要打电话Marshal.FreeHGlobal(buf)吗?

根据我有限的理解(以及从这个SO),我认为我们不应该打电话FreeHGlobal,因为我们没有打电话Marshal.AllocHGlobal。但是,我也读过这个可能需要调用的SO ?LocalFree

任何建议释放此内存的正确方法是什么(如果我需要做任何事情)?

更新:以防万一有人对 IDISPOSABLE 包装类感兴趣,这里有一篇很棒的文章