我正在写一个C#应用程序,调用C + + DLL。这个DLL是一个成像系统的设备驱动程序;当图像被采集时,图像的预览可以逐行从库中获得。 C++ dll需要一个回调来填充预览,该回调基本上由最终图像的大小,当前扫描的行和数据本身的行组成。C#应用程序到C + + dll回到C#应用程序通过回调
问题是,从扫描停止时间开始,C#回调停止获取信息时会有相当严重的延迟。该计划的流转是这样的:
- 分配回调到C++ DLL从C#中
- 用户开始获取数据
- 设备启动
- DLL开始几秒钟后,调用回调(正常)
- 设备完成图像形成
- dll仍然调用回调的图像形成时间的两倍。
这个dll与C++应用程序一起工作就好了;似乎没有最后一步的延迟。但是,在C#中,如果我立即返回回调,则延迟仍然存在;不管我在回调中做什么,它都在那里。
此延迟是从非托管代码调用托管代码的内在局限性,还是有任何一方可以做到这一点,使其更快?我正在接触C++库编写器,因此可以从C++端实现修复。
编辑:可以做一些简单的命名管道工作吗?应用程序是否可以从自己的管道读取?
所以这听起来像回调将被称为每个图像多次?多少?也许你可以通过让C++ DLL缓冲数据来将这些调用批量调用到单个回调中? – 2009-06-11 16:21:02
也许 - 如C++ dll声明缓冲区,将指针传递给C#应用程序,然后应用程序会定期从缓冲区中使用? – mmr 2009-06-11 16:42:47