问题标签 [unmanaged]

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

.net - 我可以使用哪些工具和技术来检测和隔离调用大量非托管代码的 .NET 应用程序中的高内存使用情况?

假设我有一个用 C# 编写的 WinForms .NET 应用程序。此应用程序从托管堆和非托管堆中分配大量内存。使用Red Gate ANTS Profiler(我没有使用过)或JetBrains dotTrace等工具,我可以(相对)轻松地找出托管对象的分配细节(谁、何时、多少等)。

当托管对象使用大量本机资源(例如图像或大型 COM 对象)时,或者当我调用具有大量内存需求的非托管第三方库时,我遇到了麻烦。到目前为止,我真的需要做一些侦探工作来弄清楚 1) 是托管代码还是非托管代码是内存占用者,以及 2) 谁使用了这么多非托管堆。

我目前唯一的技术是在 perfmon 中设置性能计数器,比较托管堆和非托管堆的大小、分配等。如果托管堆稳定时非托管堆继续增长,我知道要开始查看非托管库和/或消耗本机资源的 .NET 对象。

帮助开发人员处理大量托管非托管代码的最佳工具和技术组合是什么?

更新:为了更清楚,我想知道如何检测从托管代码调用的非托管代码中的内存问题(高使用率、泄漏)。我相信像 dotTrace 这样的产品只跟踪托管对象。

0 投票
2 回答
941 浏览

.net - 程序终止时的 LoaderLock 错误

我最近将 .NET NLog 日志记录组件集成到我们的一个应用程序中,该应用程序完全使用非托管代码(在 Visual Studio 6 中编译的 C++ 和 VB6 组件)开发。我们有一堆 C++ 应用程序通过 COM 接口与 NLog 通信。

目前一切正常,但我注意到在程序终止期间弹出以下消息(如果在 VS6 中调试 C++ 组件,则在输出窗口中;如果通过 VS 2005 调试 NLog,则作为 IDE 中的提示):

检测到 LoaderLock 消息:尝试在 OS Loader 锁内进行托管执行。不要尝试在 DllMain 或图像初始化函数中运行托管代码,因为这样做会导致应用程序挂起。

DllMain 如下:

我的猜测是,_Module.Term();现在包括释放一些 .NET 引用(我在我的一个 C++ 类中保留对 NLog 对象的引用,以避免每次都实例化和释放),这会导致弹出此警告。

我的问题:这可以安全忽略吗?如果不是,有什么好的解决方法?(我能想到的最好的方法是实例化对该 NLog 对象的引用,并在每次我想写入日志文件时释放它……这不是最优雅的解决方案)

0 投票
3 回答
2708 浏览

c# - 从 C DLL 到 .NET 的接口

我有一个用 C 语言编写的旧版 DLL,我想从 C# .NET 应用程序中调用它。问题是 C DLL 的 DLL 接口相当复杂。是这样的:

BIG_INPUT_STRC/BIG_OUTPUT_STRC 包含各种各样的东西......指向缓冲区数组的指针、枚举参数、整数参数等。总之,它们很复杂。

第一个问题:有没有一种简单的方法可以将 DLL 头文件中包含的所有结构信息都放入 C# 类中,还是需要将所有内容复制并粘贴到 C# 中并重新定义它?这似乎是多余的。

与此相关,将结构从 C# 传递到非托管 DLL 的正确方法是什么?

最后,是否有一个如何将缓冲区数组从 C# 正确传递到非托管 DLL 的示例?或者,如何将二维数组传递到 DLL 中?

谢谢,-格雷格

0 投票
4 回答
1327 浏览

c# - 非托管/托管互操作 - 传递 int[] 时遇到问题

我正在攻读化学博士学位,因此我需要编写一个软件应用程序来帮助我在显微镜下对样品进行成像。该显微镜配有 xyz 纳米定位台。该阶段由硬件供应商使用 VC++ 编写的非托管 DLL 控制。我可以为您提供更多需要的细节,但让我从这个开始;

dll 中的一种方法允许我读取运动轴的设置:

C++ 语法:

根据惯例,BOOL 是 int 0 或 1。

我的 C# 包装器包含:

这对我来说似乎是正确的。但是,当我在我的主应用程序中尝试这样的事情时(查询轴 1,2 和 3):

我一直得到这样的数组:

{6, 0, 10} 而根据设备本身的显示我应该得到 {0, 0 , 0} 。互补功能:

BOOL E7XX_SVO (int ID, const char* szAxes, const BOOL* pbValueArray)在舞台上设置相同的状态位也不起作用......

dll 中的其他命令运行良好。我可以毫无问题地传入和传出字符串和双打,但不是 BOOL 类型......

你们知道可能出了什么问题吗?

0 投票
3 回答
412 浏览

c# - 与非托管代码相比,在 TCP/UDP 套接字上读取/写入大量数据时托管代码是否存在性能损失?

您认为托管应用程序中使用的 C# TCP/UDP 套接字可以处理(大致)与本机 C++ 版本相同数量的数据吗?如果不是,我们应该考虑使用原生还是 c# 更好的数据量,托管端实现的最大障碍是什么?

0 投票
3 回答
3737 浏览

visual-c++ - 您可以从非托管 C++ 类派生托管 C++ 类吗?

我有一个未管理的 C++ 类,我用未管理的 dll 编写。我有一个引用非托管 dll 的托管 dll。托管 dll 中的类可以派生自非托管类吗?

使用 Visual Studio 2008

0 投票
3 回答
1839 浏览

c# - 托管与非托管

你对他们有什么看法?

有时我必须在工作中编写非托管代码,但是对于大型(游戏)项目,它只会变得更加耗时和复杂,这可以通过投入更多人来解决。

您认为托管代码对于大规模应用程序是否可行?(像 Photoshop、3ds MaxMayaXSI等应用程序,这些应用程序计算密集,但没有游戏的实时要求(在一定程度上)。

0 投票
1 回答
1093 浏览

c# - 什么是托管/非托管 .net 代码,它对我有什么影响?

我看到这里使用了相当多的术语托管和非托管。在线搜索我可以对它们有一个模糊的概念,但我真正需要知道的是它如何影响我作为 C# 桌面应用程序开发人员?我怎么知道我在任何时候都在处理什么,以及它如何改变我对该代码的处理方式?

复制

什么是 C# 中的托管/非托管代码?

0 投票
3 回答
7785 浏览

vb.net - 来自 VB .NET 中非托管 dll 的回调函数

我正在尝试在 VB.NET 中使用非托管 dll。随 dll 提供的示例源代码在 VB6 中,下面是我尝试将其转换为 .NET。当 dll 尝试执行回调时,我收到“尝试读取或写入受保护的内存”异常。我真的不关心实际调用的回调函数。我的代码:

原始VB6示例代码:

原始dll头

0 投票
9 回答
3051 浏览

c# - 用 C++ 开发 Win32 应用程序比用 C# 开发 .NET 应用程序有什么优势?

我使用 Visual C++ 和 Win32 API 学习了 Windows 编程。如今,似乎大多数应用程序都是使用 C# 在 .NET 中开发的。我知道大多数时候本机代码和托管代码之间没有太大的性能差异。所以我想知道,如果我今天要开始编写一个新的桌面应用程序,是否有任何理由(除了我更熟悉 C++ 的事实),我可能想用非托管 C++ 编写它.NET 的?使用 C++ 和本机代码还有一些优势吗?或者这种方法在 Windows 平台上是否或多或少地被 .NET 取代了?

当然,我知道编写低级设备驱动程序和类似程序的人不会在 .NET 中这样做。我问的是典型的不直接硬件调用的面向客户端的应用程序。