gpt4 book ai didi

C# 应用程序到 C++ dll 通过回调返回到 C# 应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:34 24 4
gpt4 key购买 nike

我正在编写调用 C++ dll 的 C# 应用程序。该 dll 是成像系统的设备驱动程序;获取图像时,可以从库中逐行预览图像。 C++ dll 采用回调来填充预览,该回调主要由最终图像的大小、当前扫描的行和数据行本身组成。

问题是,从扫描停止到 C# 回调停止获取信息的时间有相当严重的延迟。程序的流程是这样的:

  1. 从 C# 中将回调分配给 C++ dll
  2. 用户开始获取数据
  3. 设备启动
  4. dll 在几秒后开始调用回调(正常)
  5. 设备完成成像
  6. dll 仍在调用双倍图像形成时间的回调。

同一个 dll 与 C++ 应用程序一起工作得很好;似乎没有最后一步延迟。然而,在 C# 中,如果我让回调立即返回,延迟仍然存在;无论我在回调中做什么,它都在那里。

这种延迟是从非托管代码调用托管代码的固有限制,还是任何一方都可以做些什么来加快速度?我正在与 C++ 库编写者联系,因此可以从 C++ 端实现修复。

编辑: 做一些像命名管道这样简单的事情可行吗?应用程序可以从自己的管道读取数据吗?

最佳答案

检查垃圾收集目标的 native 回调的托管调试助手可能是罪魁祸首(它是否处于调试器下的 Debug模式?)

参见 PSA: Pinvokes may be 100x slower under the debugger Mike Stall 的博客条目。

关于C# 应用程序到 C++ dll 通过回调返回到 C# 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/978627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com