我有一个项目,我将不得不处理100秒,如果不是1000秒的消息,并相应地处理/绘制这些数据(用户将搜索一组数据,其中图形将被实时绘制,没有字面上不得不在图上绘制1000个值).
我很难理解使用dll来处理C大部分消息,然后将信息传递到C#界面.有人可以在这里嘟umb我吗?
此外,由于速度将是一个优先事项,我想知道如果访问两个不同层次的代码将有更多的性能命中,编程项目在C#中的整体,或者肯定C虽然我已经阅读坏的东西关于编程GUI在C中,这个应用程序也必须看起来现代,干净,专业等等,所以我在想C#将是前进之路(也许是XAML,wPF)
谢谢你的时间.
解决方法
在C/C++ DLL和.NET程序集之间进行互操作的最简单的方式是通过p / invoke.在C/C++方面,创建一个DLL,就像其他任何一样.在C#方面你创建一个p / invoke声明.例如,说你的DLL是mydll.dll,它导出一个方法void Foo():
[DllImport("mydll.dll")] extern static void Foo();
而已.你可以像任何其他静态类方法一样调用Foo.困难的部分是数据编组,这是一个复杂的主题.如果您正在编写DLL,那么您可能无法使出口功能轻松编组.有关p / invoke编组的更多信息,请参阅这里:http://msdn.microsoft.com/en-us/magazine/cc164123.aspx.
使用p / invoke时,您将会遇到性能问题.每次托管应用程序进行非托管方法调用时,都需要跨越托管/非托管边界,然后再次返回.编组数据时,大量的复制.如果需要,可以通过使用“不安全”C#代码(使用指针直接访问非托管内存)来减少复制.
你应该注意的是所有.NET应用程序都充满了p / invoke调用.没有.NET应用程序可以避免使操作系统调用和每个操作系统调用必须跨入操作系统的非托管世界. WinForms甚至WPF GUI应用程序使得旅程数百甚至数千次.
如果是我的任务,我将首先在C#中做100%.我会配置它,并根据需要调整性能.