C# GUI 在 C 硬计算引擎之上

标签 c# c windows performance

前段时间,我用 C# 开发了一个数学绘图仪,它通过旧的、“愚蠢的”数值计算在各种几何空间中绘制函数。 用户只需插入一个经过简化和半编译的n变量方程或曲线,然后计算域中变量值的整组组合,然后显示。

我正在对算法进行优化以减少计算量,但据我所知,对于我必须处理的问题,没有办法进行至少 5*10^7 次操作,至少功能强大机器和 C# 机器代码导致 1-1.5 秒的延迟,这是 Not Acceptable ,至少因为在 C 中实现的相同代码快 20 倍(而且这只是未优化的版本!)。

所以我想做的是修改我的应用程序,保留 80% 的旧 C#“慢”代码,包括 GUI,因此将计算和渲染部分留给“快”C。“慢”部分必须将字符串和一些 int 参数传递给“快速”引擎,并接收回 1Mb 数量级的 int 或字节数组。我读到有很多方法可以在 Windows 上实现这一点(将 C 放在主 c# 应用程序通过 P/Invoke 调用的 dll 中,构建两个不同的可执行文件,通过管道或套接字“对话”,共享内存,数据复制,等等等等),但我发现它们之间的比较很少。

标准是 1) 男子气概的表现(更少的数据交换滞后获胜),2) 简单和尽可能保持 C 代码更纯净和简单的能力(没有像 c++/cli 这样的混合语言)。

那么,解决问题的最佳策略是什么?

最佳答案

由于您没有详细说明计算,因此很难说出什么是最适合您的方法。
你是否使用了所有可能的“数学技巧”(自从我在大学学习数值分析以来已经有一段时间了,但有很多优秀的书籍)。
如果您想从您的应用程序调用 C 代码,请牢记两点:
A. 如果你使用 IPC,它会减慢速度,除非你会调用一次输入,然后得到输出,不要从进程 A 到进程 B 进行 X 调用。

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

关于C# GUI 在 C 硬计算引擎之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30927882/

相关文章:

c# - WebAPI DTO 响应请求消息传递模式

c - 仅获得 c 类型的 isalnum 函数

c - C 中的文件 IO 和字符串意外值

c++ - Windows & C++ : extern & __declspec(dllimport)

c# - Windows服务自动启动和停止,异常处理问题

c# - 在嵌套Elasticsearch中使用原始字符串创建查询

c# - C# 存储大于 512 个长整型(4096 字节)的数组是否有所不同?

c# - AND/OR 的 If 语句说明

c - 该符号的直角三角形,边长等于该数字

c# - 将列表框的选定项目传递到 xaml