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