问题标签 [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 回答
927 浏览

c# - 任何人都可以解释为什么 StreamWriter 是非托管资源。

想了解 StreamWriter 源代码的哪一部分是非托管代码。已经浏览了http://referencesource.microsoft.com/网站中的代码。

不过好像代码比较复杂,源码里面有很好的注释。但仍然很难理解,可能是我的知识没有达到那个标准。但是,如果有人有任何博客或文章可以回答这个问题。这将会非常棒 !!!

0 投票
1 回答
98 浏览

f# - [ 是否有反函数?]?

这篇文章包含两个相互关联的问题,它们具有共同的清理资源。我已经阅读了这篇 SO帖子,以及 Microsoft 网站上的其他几篇文章,试图确定什么是托管资源和非托管资源。根据我阅读的内容,以下代码块使用 .Net 托管资源。这是来自非 DLL F# 库。

尽管我相信csvFileH并被csvData管理资源,但我想知道是否存在相反的情况[<AutoOpen>],是否需要有一个?这将是一个指令,允许库释放在[<AutoOpen>].

我可以重新构建这段代码,使其具有using,csvFileH因为只需要读取 .csv 文件的句柄。但是如果List<string[]> csvData返回了一个类型,它仍然被认为是一个托管资源,当应用程序关闭时将被垃圾处理。

0 投票
1 回答
83 浏览

c# - 未分配给 var 的事项 COM 对象是否未释放?

如果我使用这样的代码,将释放所有非托管 COM 对象

而不是这样的代码

?

如果有一些文件,请在回答中发送链接。

0 投票
1 回答
163 浏览

c# - Dispose 在 Parallel for 中比常规 for 循环慢。为什么?

我已将我原来的问题简化为这个测试。

使用这个类:

我有这两个测试:

ParallelFor 通常需要大约两倍于常规 for 的时间。根据分析器,62%-65% 的执行时间花在了 ParallelFor 的 FreeHGlobal 中。只有 52%-53% 用于 FreeHGlobal 中用于常规用途。

我认为对于现代 RAM 系统,这不会有太大的不同。有没有办法在多个进程中处理大块非托管内存?有没有办法可以将其更改为多线程?

如果我不处理每个进程中使用的 RAM(坏主意,但只是为了测试),Parallel For 的速度是原来的两倍,但是我只能打开其中大约 4-5 个(它们是大量的图像数据)在应用程序崩溃之前的同一时间(正如您所猜测的那样,内存不足异常)。

为什么对单独的对象进行多个 Dispose 操作会减慢速度?

如果这是唯一的选择,我可以让它们保持单线程,但我希望加快速度。

谢谢你。

0 投票
0 回答
114 浏览

c# - 在会话的生命周期内持有非托管资源的方法

我见过的大多数包含非托管资源的实现都在方法的范围内结束。我正在寻找无限期持有此类资源并在程序停止运行时将其处置的方法。很可能需要以这种方式使用的资源的一个示例是CancellationTokenSource.Dispose()

一个例子是使用Destructor:将资源作为依赖项传入,并在容器的最后一次使用时处理它们。例如,这在 Windows Presentation Foundation 程序中是可行的(默认情况下,结构已经像这样布置),但是为每个新的非托管资源重写依赖关系结构是很累人的。随着程序的扩展,依赖项所经过的距离也是如此。

一个解决方案可能是,使每个需要它的类都是一次性的,但是自由使用析构函数不会有性能成本吗?

我的问题是:编写本规范的创造性/不寻常的方式。如果您已经了解了所介绍方法的优缺点,请务必权衡一下!

这是一个示例 WPF 程序的 App.xaml.cs

后记:澄清一下,我的示例类型UnmanagedDependency不是包装类。

0 投票
0 回答
35 浏览

asp.net-mvc-5 - MVC 5 引用非托管 dll

我正在努力解决一个问题,并且完全不知道处理问题的正确方法。

我有一个在 Windows Server 2008 R2 上运行的 MVC 5 应用程序,它通过非托管 COM dll 与会计包 (Exchequer) 通信。据我了解(我不确定我是否这样做)每个应用程序域创建一次非托管 dll?这意味着应用程序的多个用户都将“使用”同一个非托管实例?理想情况下,我希望为每个用户创建和销毁一个 COM dll 实例。谁能告诉我这是否可行,如果可以,我将如何实施它?谢谢

0 投票
1 回答
1505 浏览

c# - 如何判断资源是否不受管理?

我正在使用 Visual Studio 2017 编写 C# 应用程序。我努力通过使用“使用”语句来处理我实例化的所有对象。如果我实例化的对象不是基于可隐式转换为“System.IDisposable”的类型,Visual Studio 会警告我。此示例导致 VS 显示警告 (C#):

所有没有实现 Dispose 方法的类型都是非托管的吗?我问是因为“实施处置方法”(https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose)似乎暗示它仅适用于非托管资源。

0 投票
2 回答
339 浏览

c# - 我是否需要在 C# 中使用来自非托管 C++ dll 的原始数据类型执行 MarshalAs?

我有一个基本问题,

我有一个 C++ 非托管 dll,它具有带参数的函数进出一些无符号字符、无符号短、无符号长、有符号字符、有符号短、有符号长数据类型。

我需要编组它还是可以直接映射它?如果有的话,最好的做法是什么?

例如dll

C#(C# 中的直接映射)

0 投票
3 回答
212 浏览

c# - 即使对象超出范围,Dotnet 也不会调用其终结器。那么如何释放非托管资源呢?

我尝试使用以下代码

Node在循环内创建的类的每个对象for在离开 for 循环范围后都不会破坏(注释为“此范围”)。只有在 Main 方法的范围结束时才会调用它。当 for 循环范围结束时,是否可以自动调用 ~Node?

在执行上述代码时,我在调试窗口中得到以下信息。

这表明首先构造的对象最后被破坏了。如果发生这种情况,当我在循环中运行数千个项目时会发生什么?它会消耗我所有的记忆吗?

我怎样才能完美地释放我的非托管资源?

0 投票
1 回答
68 浏览

clr - 如何从托管 C++ 代码中正确调用 Poco 函数?

我在托管 DLL 中使用 pocoXML 函数,该 DLL 由另一个托管 C++ 项目使用。托管 DLL 可以完美编译。但是当调用一个使用 poco 函数的 DLL 函数时,我在 debug_heap.cpp 中得到一个Debug Assertion Fail (is_block_type_valid)。

我究竟做错了什么?

谢谢!