C硬件计算引擎之上的C#GUI

前段时间,我用C#开发了一个math绘图仪,它通过旧的“哑”数值计算在各种几何空间中绘制函数。 用户只需简单插入一个nvariables方程或曲线,然后计算整个域中variables值的组合,然后显示。

我正在对algorithm进行优化以减less计算量,但是就目前而言,我看不出有什么办法,因为我必须pipe理的问题至less要经过5 * 10 ^ 7的操作, C#机器代码导致1-1.5秒的延迟,这是不可接受的,至less因为在C中实现的相同代码的速度要快20倍(而且这只是未优化的版本!)。

所以我想要做的是修改我的应用程序,保留80%的旧C#“慢”代码,包括GUI,因此计算和渲染部分保留为“快”C.“慢”部分必须传递一个string和一些int参数的“快速”的引擎,并收到大小为1Mb的整数或字节数组。 我读了有很多方法可以使这个在Windows上(把C中的主要C#应用程序通过P / Invoke调用的DLL,build立两个不同的可执行文件通过pipe道或套接字“共话”,共享内存,数据复制,等等),但我发现他们之间很less比较。

标准是1)男子气概的performance(较less的数据交换滞后胜利),2)简单和能够保持C代码更纯粹和平原尽可能(没有混合语言,如C + + / CLI)。

那么,哪个是解决问题的最佳策略呢?

既然你没有详细说明计算,很难说什么是最适合你的方法。
你有没有用过所有可能的“数学技巧”(从大学学习数字分析到现在已经是时候了,但是附近有很好的书籍)。
如果你想从你的应用程序调用C代码,请记住两件事情:
答:如果你使用IPC,它可以减慢速度,除非你只要调用一次输入,然后得到输出,不要从进程A到进程B进行X调用。

B.如果你使用一个进程(C#调用C,这在Java中可以使用JNI / JNA,而且我知道它也可以在C#中),确保你的C代码是“稳定的”,就像它崩溃一样,那么你的C#部分也会崩溃(在第一种方法中,只有“C进程”在C#进程处于活动状态时崩溃(并且“C进程”可以被群集或可以使用看门狗自动启动)。