Visual-C ++ DLL将2-3兆字节复制到C#缓冲区的最快方法是什么?

时间:2013-07-12 12:58:08

标签: c# c++ windows visual-studio-2010 visual-c++

什么样的C#缓冲区可以处理这个?

我需要我的C#解决方案.exe从生成实时视频帧(最多60秒/秒)的Visual-C ++ DLL中获取大约2-3MB的数据,每秒最多60次,并将其复制到C#缓冲区。然后,C#将通过USB将此数据转发到另一台计算机。

我已经尝试过C#字符串但是有最大大小限制(大约10KB)。

我正在考虑一个包含数据缓冲区和握手变量的C#结构。

可能我需要多个缓冲区,因此可能需要这些结构的数组。

但是,基本上,提供某种C#缓冲区的DLL目标地址是最好的方法(最快!!!),这样DLL就可以将其2-3MB的生成数据复制到缓冲区,然后设置一个变量标志,同时C#轮询该标志以知道数据何时在缓冲区中,因此可以进一步处理。

缓冲区应该首先由C#创建,而不是DLL,我认为。

1 个答案:

答案 0 :(得分:1)

这是一个想法:

  1. 让C#代码分配缓冲区
  2. 将其固定到固定地址
  3. 将指针传递给C ++代码
  4. C ++代码现在可以直接写入缓冲区(甚至可能使用零拷贝方法)
  5. 优点是您可以使用普通的托管byte[]