c# - 多线程代码的运行时优化
问题描述
对不起我的最后一个问题,我的代码太愚蠢了。我的基本情况是:我想构建一个有 8 个的状态树!处于最后状态的项目。所以迭代的总数约为 100.000 (8!*2 + 7! + 6! + ... )
目前只需要不到一秒钟,每次我的人工智能移动时我都需要构建它。当然,alpha/beta 搜索是一种解决方案,但在考虑之前我想优化我的代码,所以我真的有最好的性能。
我已经做过的事情:尝试用具有更快访问速度的预计算或集合(字典)替换每个 LINQ 函数,跳过整个操作的更多预计算,当然,一些近似值以节省大量计算,仅在实际发生更改时使用 List 构造函数,如果不,只是使用参考。会有更多的计算,所以我真的需要更多的想法来减少。也许关于什么收藏对我的目的来说是最快的。
这是关于 BuildChildNodes 函数和调用的 TryCollect 函数。我的构造函数正在做一些小的预先计算。我的状态树知道一切,即使是实际上没有显示的卡片。
当评论出现时:我不是要求您阅读和理解我的代码来提供内容方面的建议。我在问你我正在使用的函数、运算符、数据类型和类,以及是否可以替换运行得更快一些。例如,如果出于我的目的有一个更快的集合,或者如果您有一个更好的想法,即用更快的方法替换集合构造函数,以便在之后添加和删除。
编辑:好的 List 绝对是我可以使用的最佳类型。我尝试了 [] 数组甚至字典 (),最后我什至尝试了 LinkedLists。都有重大损失。
解决方案
我可以看到这RemoveAt()
可能会很昂贵,因为它与列表的大小成正比。
您始终可以使用 Visual Studio 性能分析器来找出最应该优化代码的地方。
如果您能找到一种方法来使用您在程序启动时分配的固定大小的数组,而不是像 动态分配的数据结构List
,您将节省大量内存分配管理开销。
推荐阅读
- django - 如何为networkx图添加额外的权重?
- java - 带有控制台实现的基于瓦片的地图中的多瓦片对象
- javascript - 如何在nodejs中将对象转换为protobuf数据
- c++ - Vxworks7:Boost V1.75 标志:BOOST_THREAD_USES_GETPAGESIZE
- python - 解析具有不匹配列的 CSV 数据 - Python Pandas
- paypal - 如何在 NuxtJs 中集成 PayPal 智能支付按钮?
- azure - 如何通过带有 Az 模块的 PowerShell 获取 Azure 资源的 cpu 使用率
- api - 寻找 API 端点以获取市场上可用的 github 操作列表
- java - Android - 检测到 wifi 上的启动事件或“位置已更改”
- entity-framework - 在 EF6 DbContext 模型中将缺少的 DB 列声明为可为空时忽略它们