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

c# - 非托管资源、IDisposable 和自定义类型

关于这个主题的另一个话题,因为我厌倦了阅读无数主题以找到我的问题的答案:)

假设我们有以下类:

由于与数据库的连接是在 using 语句中实例化的,因此 con.close() 和最终 con.dispose() 方法将被调用,是否需要为 MyClass 实现 IDisposable?MyClass 超出范围时会被垃圾收集吗?

编辑:

谢谢你的回复,这就是我的想法,但我需要说清楚。还有一个问题。

如果我的类有几个 Operations() 在数据库上做一些工作,从资源消耗的角度来看,拥有一个 SqlConnection 成员,实例化并在类构造函数上打开它并实现 IDisposable 以关闭它而不是更好的做法在每个操作中使用“使用”语句(在每个操作中打开和关闭数据库)?当然,那样我应该只在 using 语句中实例化和使用 MyClass 对象。

0 投票
1 回答
464 浏览

.net - 将非托管 DLL 部署到输出目录

我正在尝试组织我的 VS 2010 解决方案。阻碍我的一个领域是使用非托管 DLL。我无法将它们添加为引用,因为 DLL 是非托管的。以前的方法是在 Pre/Post 构建事件期间将 DLL 从“lib”文件夹 xcopy 到输出文件夹。这样做的缺点是每次构建都会发生不必要的复制,并且清理操作从未从输出文件夹中删除 DLL。

我理想的解决方案是将 DLL 合并到 VS lib 文件夹中,并利用“如果更新则复制”功能。但是,VS 在输出文件夹中创建了一个 lib 文件夹并将 DLL 放在那里。请注意,我不喜欢将 DLL 放在我的项目树的顶层。有很多 DLL,这似乎污染了项目。

0 投票
4 回答
940 浏览

c# - 抽象基类中的 IDisposable 和析构函数

我有一个抽象基类,它实现了 IDisposable 和除析构函数之外的完整bool disposed = falseDispose()和模式。Dispose(bool)基类实现了 IDisposable,因为它的许多派生类需要释放非托管资源。但是,我听说带有析构函数的类很昂贵,因此如果我包含析构函数,那么没有非托管资源的派生类会变得不必要地昂贵。我对这个问题感到困惑。我应该还是不应该包含析构函数,为什么?谢谢。

0 投票
1 回答
885 浏览

visual-studio-2010 - 缺少清单异常 Visual Studio 2010 项目从 2003 年、2008 年转换

我有一个最初使用 Visual Studio 2003 创建的 Win Forms C++ 解决方案,转换为 2008(成功),现在我正在尝试将其转换为 Visual Studio 2010。

该解决方案构建时没有错误,然后在运行时尝试从表单的资源加载图像列表时出现缺少的清单异常。异常发生在以下代码行:

我想我发现了问题,如果我使用 2008 程序集的 ildasm 检查清单,我会看到以下表格资源:

2010 程序集的清单如下所示:

我确定它找不到它,因为第一个实例中有额外的“net”文本,而第二个实例中有额外的 ..$temp$Debug 。

所以最后,我的问题是:我在项目设置中的哪里解决这个问题?..\temp\Debug 是项目路径的一部分......如果我将“中间目录”设置更改为 $(Configuration) 我现在得到:

在仍然产生异常的清单文件中。

谢谢你的帮助...

0 投票
2 回答
210 浏览

c# - 使用 using-keyword 的这两种实现之间的差异

仅作为创建 MD5 哈希的示例,微软提供了以下代码示例:

MSDN 代码

并且使用它会像这样完成

我的代码

我认为更改 Microsoft 为此提供的代码会使帮助方法的可重用性变得更容易:

因此,重用它会创建更少的代码行:

那么不像我在第二个例子中那样做的目的是什么?我最初的想法是,使用 MSDN 提供的代码的程序员总是会意识到他们使用非托管资源的事实(这是正确的术语吗?),而如果他们使用我的实现,他们就不会。

还有其他想法吗?

0 投票
2 回答
1295 浏览

c# - 应用程序死亡时杀死外部进程

我一直在研究一个调用外部可执行文件(在我的情况下为 ffmpeg)的小块然后我编写了一个测试并在调试模式下使用了测试运行器,现在如果我停止调试(终止)它仍然运行 ffmpeg。我试图终止终结器中的进程并使用 IDisposable - 它仍然运行。我怎样才能确保进程永远不会像那样离开,如果调用者死亡或失败或以任何方式停止,ffmpeg 可执行文件保证会被杀死。

我像往常一样运行这个过程(没什么特别的)

0 投票
1 回答
190 浏览

c# - 使用 BitMap 对象而不锁定资源

从上一个问题的答案中,Hans Passant我了解到:

是的,该代码锁定了文件。锁是由 GDI+ 创建的内存映射文件对象产生的,它可以有效地将文件的像素数据映射到内存中,而无需在分页文件中分配空间。只要图像显示在图片框中并且未处理,您将无法删除文件,锁定可以防止这种情况。

问题是当我尝试从PictureBox. 似乎在这种确切的情况下甚至调用:

不保证在删除图像的时候(我猜这可能是任何类型的非托管资源)它会被处理掉。

所以我有两个问题 - 第一个问题与我当前使用BitMapinPictureBox和由此引起的资源锁定问题有关。我看到这不是在内部显示图像的唯一方法,PictureBox所以还有另一种不会导致此问题的方法,并且可以保证在我需要的任何时候释放图像以将其删除。

我的第二个问题 - 当我必须在 .NET 中使用非托管资源并且我需要对它们进行类似操作时,基本方法是什么Delete。我想在.NET中使用任何类型的非托管资源时可能会出现这个问题,是否有一种通用的方法来解决在某个时刻锁定/释放资源而不是中继的问题Garbage Collector(这显然会让你失败不时,因为它可能需要不同的时间来发布)。我看到一些使用GC...方法来显式调用finilizer和类似的东西,但是一所大学提到最好不要使用这些方法,因为它们可能会导致不可预测的问题。

那么有什么指导方针和建议吗?

0 投票
2 回答
905 浏览

c# - System.Data.SqlClient 代码是托管代码吗?

  1. 在 C# 程序中使用 System.Data.SqlClient 命名空间执行的查询是托管代码还是非托管代码?

  2. 每次连接关闭时,(conn.Close()都会使用方法)资源是否考虑释放或者我们必须释放它才能释放?

0 投票
1 回答
616 浏览

.net - 调试 .NET COM 组件

我对 .NET COM 组件有几个问题。

基本上我正在开发一个.NET COM 服务器(.DLL)来支持我们的遗留系统,这个想法是遗留系统调用 COM 服务器方法,.NET COM 代码实习生调用我们的托管 WCF 服务。

最初,我开发了一个具有基本功能(即不调用 WCF 服务)的 .NET COM 组件 (.DLL),编写了一个 VB 脚本来访问 COM 方法,一切正常。

对于 WCF 服务,配置相关信息存储在 app.config 中,但我没有看到 app.config 文件加载到 app-domain 中

1) 如何为 .NET COM 服务器加载 app.config

2) 如何调试.NET COM 组件

提前致谢。

0 投票
1 回答
346 浏览

c# - ToolStripMenuItem 是否有任何底层非托管资源?

ToolStripMenuItem在我的一些项目中使用并使用 C# 运算符分配它new

IDisposable我阅读了有关接口和using语句的 MSDN 文档( http://msdn.microsoft.com/en-us/library/yh598w02.aspx )。我仍然不清楚 ToolStripMenuItem 是否有任何底层的非托管资源。

Dispose(false)更准确地说,如果发生异常,我应该处理对方法的调用吗?