首页 > 解决方案 > 多线程代码的运行时优化

问题描述

对不起我的最后一个问题,我的代码太愚蠢了。我的基本情况是:我想构建一个有 8 个的状态树!处于最后状态的项目。所以迭代的总数约为 100.000 (8!*2 + 7! + 6! + ... )

目前只需要不到一秒钟,每次我的人工智能移动时我都需要构建它。当然,alpha/beta 搜索是一种解决方案,但在考虑之前我想优化我的代码,所以我真的有最好的性能。

我已经做过的事情:尝试用具有更快访问速度的预计算或集合(字典)替换每个 LINQ 函数,跳过整个操作的更多预计算,当然,一些近似值以节省大量计算,仅在实际发生更改时使用 List 构造函数,如果不,只是使用参考。会有更多的计算,所以我真的需要更多的想法来减少。也许关于什么收藏对我的目的来说是最快的。

我的代码

这是关于 BuildChildNodes 函数和调用的 TryCollect 函数。我的构造函数正在做一些小的预先计算。我的状态树知道一切,即使是实际上没有显示的卡片。

当评论出现时:我不是要求您阅读和理解我的代码来提供内容方面的建议。我在问你我正在使用的函数、运算符、数据类型和类,以及是否可以替换运行得更快一些。例如,如果出于我的目的有一个更快的集合,或者如果您有一个更好的想法,即用更快的方法替换集合构造函数,以便在之后添加和删除。

编辑:好的 List 绝对是我可以使用的最佳类型。我尝试了 [] 数组甚至字典 (),最后我什至尝试了 LinkedLists。都有重大损失。

标签: c#multithreadingoptimization

解决方案


我可以看到这RemoveAt()可能会很昂贵,因为它与列表的大小成正比。

您始终可以使用 Visual Studio 性能分析器来找出最应该优化代码的地方。

如果您能找到一种方法来使用您在程序启动时分配的固定大小的数组,而不是像 动态分配的数据结构List,您将节省大量内存分配管理开销。


推荐阅读