我正在编写交易软件,我需要每一微秒的速度。我能做些什么?我正在考虑使用ngen
,但维基百科告诉 JIT 可能会更好。我可以调什么?我可以强迫它以Xeon E5
某种方式使用指令吗?将Windows中的优先级更改为最高帮助,如果是这样,如何始终以最高优先级运行程序?我可以将此程序添加到“受信任”,以便.NET 不会检查安全性等。
即我想要硬件/软件/.net 中的完整配置列表和可以影响和帮助更快地运行程序的操作(如运行 ngen)。
我正在编写交易软件,我需要每一微秒的速度。我能做些什么?我正在考虑使用ngen
,但维基百科告诉 JIT 可能会更好。我可以调什么?我可以强迫它以Xeon E5
某种方式使用指令吗?将Windows中的优先级更改为最高帮助,如果是这样,如何始终以最高优先级运行程序?我可以将此程序添加到“受信任”,以便.NET 不会检查安全性等。
即我想要硬件/软件/.net 中的完整配置列表和可以影响和帮助更快地运行程序的操作(如运行 ngen)。
是时候停止猜测并找出问题的实际所在。使用EQATEC 免费性能分析器找出您的瓶颈并解决它们。
NGEN
有助于提高应用程序的启动时间,但绝对不是解决该问题的金钥匙。您很可能会修复它来分析您的应用程序。
运行时优化呢:
结帐数据库访问(如果有),优化您的查询并将检索到的数据减少到您真正需要的数量
查看磁盘访问操作
看CPU消耗。分析 yoi 后,可以使用Process Explorer从应用程序行为的角度检查 CPU 和内存消耗
分析后确定您进行的不必要或繁重的迭代(如果有),并使用字典(仅示例)进行 O(1) 访问
... 和更多...
就像阅读性能方面的文献一样,可以肯定地暗示IT 行业最伟大的性能专家之一的怪物博客:Rico Mariani 的性能花絮
希望这可以帮助。
不是windows,选择更实时的操作系统,因为速度有几个组成部分,一致的速度还是最好的?
调优代码很好,但不要总是这样做。尝试代码审查、纠正大的逻辑错误或额外的工作比低级调优更有益。
明白每一微秒都很重要,但你的 CPU 和逻辑是最快的部分,网络、磁盘、分页等很可能是真正的敌人。因此,请确保您专注于正确的事情。您必须停止所有不需要的 I/O。
某些驱动程序、网卡等比其他驱动程序更快。
检查您对库的使用并确保您了解它们的性能方面,很多运行时间都在库中等。
当然还有更多以 .NET 为中心的答案和特定的答案,但我尝试回答问题背后的问题。
消除GC!
人们在交易系统中使用的另一个“技巧”是编写不会进行垃圾收集的 C# 代码。显然,完全移除垃圾回收是不可能的,但您可以做的是在程序运行后最小化或消除 GC。您在初始化阶段完成所有工作以设置您的应用程序、初始化您的组件等,并在此处允许任何 GC。但是一旦您设置好并准备好运行,请确保代码不会产生垃圾并且不会执行装箱/拆箱。(在 SO 上搜索“避免 GC”,您会发现一些有用的信息)。
术语“交易系统”可以包含无数不同的东西。您是在谈论在 .NET 中编写算法吗?还是您的算法是用其他东西编写的,并且有 .NET 框架来托管它?你只是在谈论用户界面吗?你的交易系统是分布式的吗?你知道你的程序需要多快吗?如果您不交易高频模型,那么什么是“足够快”?当您的交易策略不需要时,不要仅仅推动必须在 1-2 毫秒范围内运行的东西。
重要的是,不要抛弃久经考验且值得信赖的 OO 原则;SOLID仍然适用于交易系统,尽管在某些情况下您可能会违反规则。只需确保您确定哪些需要提高性能并对其进行优化 - 不要认为您必须优化所有内容并确保您对所有内容进行基准测试和测量,以便您知道哪些需要更快以及需要提高多少。
并保持简单!交易系统不必很复杂。