C++/C#继续 问和明显地让人难堪,这是怎么想的?我能给C语言应用程序提供一个缓冲区到C++ DLL,然后在C语言中有一个定时事件,只是把缓冲区的内容复制出来吗?这样,我就避免了明显发生的回调调用所造成的任何延迟。这是可行的,还是编组阻止了这种缓冲区访问?或者我必须进入不安全模式,如果我这样做或不这样做,有什么神奇的词语可以让它工作
从另一个问题中总结:C++/C#继续 问和明显地让人难堪,这是怎么想的?我能给C语言应用程序提供一个缓冲区到C++ DLL,然后在C语言中有一个定时事件,只是把缓冲区的内容复制出来吗?这样,我就避免了明显发生的回调调用所造成的任何延迟。这是可行的,还是编组阻止了这种缓冲区访问?或者我必须进入不安全模式,如果我这样做或不这样做,有什么神奇的词语可以让它工作,c#,c++,buffer,sharing,C#,C++,Buffer,Sharing,从另一个问题中总结: 我有一个用C++编写的驱动程序和一个用C语言编写的应用程序。李> 我需要以预览方式从驱动程序获取数据 C++应用程序与C++ DLL交互很好;C#应用程序在复制数据时有很大的延迟 延迟似乎不是由C#端的发布/调试差异引起的 我需要避开耽搁。这项拟议的缓冲区计划是否可行?C应用程序是否会从一个由C++ DLL写入的缓冲区消耗,或者我需要做其他的事情吗? :是的,你可以从C到C++传递一个缓冲区(例如字节[])。我被你原来的问题难住了。我使用我自己的C++代码中的回调到C语
-
我有一个用C++编写的驱动程序和一个用C语言编写的应用程序。李>
- 我需要以预览方式从驱动程序获取数据
- 延迟似乎不是由C#端的发布/调试差异引起的
- 我需要避开耽搁。这项拟议的缓冲区计划是否可行?C应用程序是否会从一个由C++ DLL写入的缓冲区消耗,或者我需要做其他的事情吗?
<>:是的,你可以从C到C++传递一个缓冲区(例如字节[])。我被你原来的问题难住了。我使用我自己的C++代码中的回调到C语言,我从来没有注意到性能问题——尽管我试图在循环的每一次迭代中不做回调,因为我确实期望一些封送开销。 < P>主要原因是PInvoke很慢,用什么来解决这个问题。 - 使用托管代码中非托管代码的数据
那么您就有问题了,除非您将其作为字节指针(不安全代码)使用,或者您获取了一个副本(封送处理可以为您提供)。很可能是后者让你慢下来了(但不要猜测基准) - 在非托管代码中使用托管代码中的数据
这很简单,您只需确保在非托管代码使用关联缓冲区时锁定该缓冲区
听起来你想做一件事。您是否对延迟进行了基准测试?如果是复制(缓冲区有多大是出于兴趣),那么您能否更改您的c#代码以作为字节指针(和长度)与缓冲区交互?
如果您可以访问C++/CLI,您通常可以更清晰地解决这一问题,因为不受管理的代码部分(使用原始缓冲区)更容易实现,而受管理的部分只需使用它的子部分(仅复制绝对需要的内容),正如我在另一个线程中所说,看来延迟完全是在C++侧,所以我的末尾没有大量的问题来解决这个问题。考虑在原始线程中继续讨论这个问题。没有人查看原始线程:(或抱歉,35人)。