Spa*_*rky 9 c# c++ wpf performance user-interface
我有一个项目,如果不是1000秒的消息,我将不得不处理100秒,并相应地处理/绘制图表上的数据(用户将搜索一组数据,其中图表将实时绘制,不必在图表上绘制1000个值.)
我无法理解使用dll在C++中进行大量的消息处理,然后将信息传递到C#接口.有人可以在这里为我愚蠢吗?
此外,由于速度将是一个优先级,我想知道是否访问跨越2个不同的代码层将有更多的性能命中,在C#中完整地编程项目,或者当然,我读过关于编程GUI的坏事在C++中,这个应用程序也必须看起来现代,干净,专业等等所以我认为C#将是前进的方向(也许是XAML,wPF)
谢谢你的时间.
在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%做.然后,我会对其进行分析并根据需要调整性能.
归档时间: |
|
查看次数: |
8876 次 |
最近记录: |