在询问了this question并显然使人难为情之后,对此有何想法?我能否将一个缓冲区从C#应用程序提供给C++ dll,然后在C#中发生计时事件,只需将缓冲区的内容复制出来?这样,我避免了明显发生的回调调用引起的任何延迟。那行得通,还是编码阻止这种缓冲区访问?还是我必须进入不安全模式,如果我做了或不这样做,使它起作用的神奇词汇是什么?

回顾另一个问题:

  • 我有一个用C++编写的驱动程序和一个用C#编写的应用程序。
  • 我需要以预览方式从驱动程序获取数据。
  • C++应用程序与C++ dll交互就很好; C#应用程序复制数据的延迟很大。
  • 延迟似乎不是由C#端的release / debug差异引起的
  • 我需要解决延迟问题。提议的缓冲方案可以工作吗? C#应用程序可以从C++ dll写入的缓冲区中消费吗,还是我需要做其他事情?
  • 最佳答案

    如果你想

  • 从托管代码中的非托管代码消费数据
    然后,除非您将其用作字节指针(不安全代码)或进行复制(封送处理会对您有用),否则您将遇到问题。后者可能会使您放慢速度(但不要猜测基准)。
  • 在非托管代码中使用托管代码中的数据
    然后,这非常简单,您只需要确保在非托管代码正在使用关联缓冲区的同时将其固定即可。

  • 听起来好像您想做1.基准了延迟吗?如果是复制(缓冲区不感兴趣的大小有多大),那么您可以更改C#代码以作为字节指针(和长度)与缓冲区交互吗?
    如果可以访问C++ / CLI,则通常可以更整洁地解决此问题,因为不托管代码的某些部分(使用原始缓冲区)更容易,而托管部分仅使用其子部分(仅复制)更容易。绝对需要什么)

    09-10 04:02
    查看更多