C# 我应该如何实现可擦洗的寻路&x27;时间线';?

C# 我应该如何实现可擦洗的寻路&x27;时间线';?,c#,algorithm,optimization,path-finding,a-star,C#,Algorithm,Optimization,Path Finding,A Star,我正在创建一个寻路可视化,我想实现一个滑块,让人们可以查看正在进行的寻路工作之前的“状态”。这个问题更多的是关于优化的,但是一组新的眼睛可能会看到一个更好的方法 我成功地做到了这一点,每次寻路算法进行时,我都会创建一个包含所有状态的网格,收集所有打开/关闭/路径堆栈节点,并从中构建一个新的“网格” 然而,作为一个缺点,我的算法现在非常慢,可能比原来慢100倍左右。我需要一个更好的方式来记录状态,或者是一个关于我应该如何实现这一点的整体范式转变 我的第二个想法(我还没有实现)是评估算法的状态如何工

我正在创建一个寻路可视化,我想实现一个滑块,让人们可以查看正在进行的寻路工作之前的“状态”。这个问题更多的是关于优化的,但是一组新的眼睛可能会看到一个更好的方法

我成功地做到了这一点,每次寻路算法进行时,我都会创建一个包含所有状态的网格,收集所有打开/关闭/路径堆栈节点,并从中构建一个新的“网格”

然而,作为一个缺点,我的算法现在非常慢,可能比原来慢100倍左右。我需要一个更好的方式来记录状态,或者是一个关于我应该如何实现这一点的整体范式转变

我的第二个想法(我还没有实现)是评估算法的状态如何工作,并手动更新“当前”渲染网格,逐个坐标,然后将其复制到以前的网格列表中。这应该会产生更好的性能,但它会严重污染代码,使其看起来非常混乱

如果我成功地将
节点
对象转换为
结构
,我的第三个想法可能是可行的,那就是使用线程来加速网格构建过程。我从未在C#中使用过线程,我不知道它们在小规模操作中的性能如何(它们可能需要在<0.2ms的时间内打开和完成),但这是一个想法

我用C#with Unity编写了这个程序,但是这种语言实际上与算法或设计的工作方式没有太大关系

在GitHub上。请注意
RecordState()
调用。我为糟糕的代码库道歉,它仍然很糟糕