我正在编写一个调用 C++ dll 的 C# 应用程序。此 dll 是成像系统的设备驱动程序;获取图像时,可从库中逐行预览图像。C++ dll 需要一个回调来填充预览,该回调基本上由最终图像的大小、当前扫描的行和数据行本身组成。
问题是,从扫描停止和 C# 回调停止获取信息的时间开始存在相当严重的延迟。程序的流程类似于:
- 从 C# 中将回调分配给 C++ dll
- 用户开始获取数据
- 设备启动
- dll在几秒钟后开始调用回调(正常)
- 设备完成成像
- dll 仍在为双倍图像形成时间调用回调。
这个相同的 dll 与 C++ 应用程序一起工作得很好;最后一步似乎没有延迟。但是,在 C# 中,如果我让回调立即返回,则延迟仍然存在;无论我在回调中做什么,它都在那里。
这种延迟是从非托管代码调用托管代码的固有限制,还是任何一方都可以做些什么来加快速度?我正在与 C++ 库编写者联系,因此可以从 C++ 端实现修复。
编辑:可以做一些简单的事情,比如命名管道吗?应用程序可以从自己的管道中读取吗?