2009-06-11 70 views
2

在询问this question并明显地困住了人后,我怎么会这样想 - 我可以从C#应用程序缓冲到C++ dll,然后在C#中有一个计时事件,只需复制内容缓冲出来了吗?这样,我就避免了显然发生的回调调用造成的任何延迟。这会起作用,还是编组会妨碍这种缓冲区访问?或者我将不得不进入不安全模式,如果我做或不做,将会有什么神奇的词让它工作?C++/C#回调继续

要从其他问题回顾:

  • 我已经写在C++驱动程序和C#编写的应用程序。
  • 我需要以预览式的方式从驱动程序获取数据。
  • C++应用程序与C++ dll交互就好了; C#应用程序有很大的延迟来复制数据。
  • 延迟似乎不是由C#端发布/调试差异引起的
  • 我需要避开延迟。这个建议的缓冲方案能起作用吗C#应用程序能否从C++ dll写入的缓冲区中消耗,还是需要做其他事情?
+0

请考虑在原始线程中继续此讨论。 – 2009-06-11 16:19:12

回答

0

正如我在另一个线程中所说的那样,延迟完全在C++端,所以在我的结尾没有任何讨论可以解决这个问题。

0

是的,你可以将一个缓冲区(例如。byte [])从C#传递给C++。我被你最初的问题困住了。我使用从我自己的C++代码到C#的回调函数,并且我从来没有注意到性能问题 - 尽管我试图不在循环的每次迭代中执行回调,因为我期望有一些编组开销。

2

如果你想

  1. 消耗从非托管代码数据托管代码
    然后你有一个问题,除非你使用它作为一个字节的指针(不安全的代码),或者你把副本(编组将为你做)。后者可能会降低你的速度(但不要猜测基准)。

  2. 消耗非托管代码从托管代码数据
    然后,这是非常简单,你只需要确保你的脚相关缓冲区,而它正在使用的非托管代码。

听起来像你想要做的1.你有没有基准延迟?如果是复制(有多大的缓冲区不感兴趣),那么你可以改变你的c#代码作为一个字节指针(和长度)与缓冲区交互?
如果您有权访问C++/CLI,则通常可以更干净地解决此问题,因为部分代码不受管理(使用原始缓冲区)并且管理的部分仅与其子部分一起工作更容易只复制绝对需要的东西)