使用C#前端的C++后端?

Spa*_*rky 9 c# c++ wpf performance user-interface

我有一个项目,如果不是1000秒的消息,我将不得不处理100秒,并相应地处理/绘制图表上的数据(用户将搜索一组数据,其中图表将实时绘制,不必在图表上绘制1000个值.)

我无法理解使用dll在C++中进行大量的消息处理,然后将信息传递到C#接口.有人可以在这里为我愚蠢吗?

此外,由于速度将是一个优先级,我想知道是否访问跨越2个不同的代码层将有更多的性能命中,在C#中完整地编程项目,或者当然,我读过关于编程GUI的坏事在C++中,这个应用程序也必须看起来现代,干净,专业等等所以我认为C#将是前进的方向(也许是XAML,wPF)

谢谢你的时间.

Ter*_*ver 7

在C/C++ DLL和.NET程序集之间进行交互的最简单方法是通过p/invoke.在C/C++方面,像创建任何其他DLL一样创建DLL.在C#端,您可以创建ap/invoke声明.例如,假设您的DLL是mydll.dll并且它导出一个方法void Foo():

[DllImport("mydll.dll")]
extern static void Foo();
Run Code Online (Sandbox Code Playgroud)

而已.您只需像任何其他静态类方法一样调用Foo.困难的部分是数据编组,这是一个复杂的主题.如果您正在编写DLL,您可能会尽力使导出功能轻松编组.有关p/invoke编组主题的更多信息,请参见此处:http://msdn.microsoft.com/en-us/magazine/cc164123.aspx.

使用p/invoke时会受到性能影响.每次托管应用程序进行非托管方法调用时,都需要跨越托管/非托管边界,然后再返回.当您编组数据时,会进行大量复制.如果需要,可以使用"不安全"的C#代码(使用指针直接访问非托管内存)来减少复制.

您应该注意的是,所有.NET应用程序都充满了p/invoke调用.没有.NET应用程序可以避免进行操作系统调用,并且每个OS调用都必须进入操作系统的非托管世界.WinForms甚至WPF GUI应用程序使这一旅程每秒数百甚至数千次.

如果这是我的任务,我会先用C#100%做.然后,我会对其进行分析并根据需要调整性能.


Phi*_*ipp 6

如果速度是您的首选,C++可能是更好的选择.尝试对计算的实际程度进行一些估计(如果每条消息的计算很容易,那么在C#中处理1000条消息是微不足道的,即使是最优化的程序也可能太难了).如果您的算法很复杂,涉及不同的类等,C++可能比C#有更多的优势(关于性能).

您可能需要查看此问题以进行性能比较.

Separiting后端和前端是个好主意.如果在C++中使用C#而导致性能下降,C#取决于实际需要多少数据转​​换.

我不认为编程GUI是一般的痛苦.MFC可能很痛苦,Qt不是(恕我直言).

也许这会给你一些开始点!