Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理动画工具数据存储的最有效/最快速的方法_C#_Animation_Optimization_Unity3d_Collections - Fatal编程技术网

C# 处理动画工具数据存储的最有效/最快速的方法

C# 处理动画工具数据存储的最有效/最快速的方法,c#,animation,optimization,unity3d,collections,C#,Animation,Optimization,Unity3d,Collections,如果我有一组可能是非线性但有序的值:1、3、8、12,我添加了一个新的值,比如说5,与其他任何存储在3到8之间的值相比,最好的收集类型速度是多少,然后给我索引,这样我就可以直接检查该值后面和前面的值。这是一个动画系统,我存储关键帧,我需要知道前面和后面是什么,这样我才能正确地插值 目前我使用的是一个哈希表dicitonary,它的关键点是关键帧存储的帧号,值是我想要的位置 因此,使用这种方法,在进行更改时更新关键帧非常有用,但在设置动画时,如果我将soem数据放在5中,则查找3和8会使我遍历整个

如果我有一组可能是非线性但有序的值:1、3、8、12,我添加了一个新的值,比如说5,与其他任何存储在3到8之间的值相比,最好的收集类型速度是多少,然后给我索引,这样我就可以直接检查该值后面和前面的值。这是一个动画系统,我存储关键帧,我需要知道前面和后面是什么,这样我才能正确地插值

目前我使用的是一个哈希表dicitonary,它的关键点是关键帧存储的帧号,值是我想要的位置

因此,使用这种方法,在进行更改时更新关键帧非常有用,但在设置动画时,如果我将soem数据放在5中,则查找3和8会使我遍历整个列表,找出当前条目的索引,然后存储上一个条目并迭代到下一个条目。。更不用说每次我向字典中添加内容时,它都需要按键排序才能正常工作

只是想找一些建议来解决这个相当开放的问题

要了解此动画工具的当前结构,请执行以下操作:

我有一个称为时间轴的组件,它是KeyframeProperties记录的内容。因此,在keyframeproperty中,您可以调用record,它会询问它所连接的时间线是否可以录制到当前插槽中,如果可以,它将返回记录关键帧的索引,然后keyframe属性将该索引存储到它当前拥有的字典中,其中包含动画师的当前数据。当选择播放动画时,调用timeline.play函数,它将处理遍历所有连接的属性并调用keyframeproperty.advanceframeint frame。这就是为什么我需要上一帧和下一帧,因为如果不知道这一点,当帧传入时,就无法知道动画的下一个插值目标应该在哪里


示例:传入4,属性中最近的两个关键帧分别为3和7,动画应将开始位置设置为第3帧数据,然后以0.25 1/7-3=0.25插值到第7帧。我认为.NET中没有任何集合/容器返回插入项的索引。至少订购的没有提供这种能力

你的问题比表面上看起来要复杂得多。因为,就我从你问题的标签中可以看出,你的解决方案的目标是Unity,它使用了一个相当旧的Mono实现,目标是.NET3.5概要文件。此外,由于Unity有能力将C代码转换为与IL2CPP相关的C++,这取决于您正在瞄准的平台,甚至可能需要考虑C++编译器如何处理代码,是否将代码化。所以,很难给你一个直截了当的答案,但我会尝试一下

如果您的数据集很小,我会说少于几千项,这是一个相对数字,取决于您的目标平台,那么您可以使用几乎任何您选择的集合/容器,这不会有很大的区别。如果是这样的话,我会选择它,因为它允许你通过一次搜索操作,在列表中的前一个和下一个项目中找到你正在寻找的项目和它的邻居。在您的情况下,如果有对包含关键帧5的LinkedListNode的引用,则可以通过使用LinkedListNode对象的“上一个”和“下一个”属性来检查上一个关键帧和下一个关键帧的位置。这很方便

如果你有一个大的数据集;首先,什么对你来说更重要,插入速度还是检索速度?不幸的是,它们走的是相反的方向,所以你必须在那里做出选择。如果检索速度是您喜欢的,那么忘记LinkedList类吧,它对于遍历大量数据来说太慢了。但是,如果您喜欢插入速度,那么LinkedList也是一个不错的选择,因为它不必在每次向列表中添加值时对所有数据进行排序。您只需在所需的位置插入一个项,它所做的只是在此处或那里更改一些指针。问题是,您必须告诉它您要将项目添加到的位置。也就是说,您仍然需要执行搜索以找到要插入项目的位置,这将非常昂贵,但仍然不会像求助于成千上万的项目那样糟糕


如果您打算以IL2CPP为目标,那么我将忘记以上所有内容,使用一个简单的数组,自己实现所有搜索、插入、排序和数组大小调整操作。因为数组中的搜索操作很可能被C++编译器所矢量化,这将给你一个大数据集的速度提升。

< P>我不认为有任何集合/容器在.ne中。 它返回插入项的索引。至少订购的没有提供这种能力

你的问题比表面上看起来要复杂得多。因为,就我从你问题的标签中可以看出,你的解决方案的目标是Unity,它使用了一个相当旧的Mono实现,目标是.NET3.5概要文件。此外,由于Unity有能力将C代码转换为与IL2CPP相关的C++,这取决于您正在瞄准的平台,甚至可能需要考虑C++编译器如何处理代码,是否将代码化。所以,很难给你一个直截了当的答案,但我会尝试一下

如果您的数据集很小,我会说少于几千项,这是一个相对数字,取决于您的目标平台,那么您可以使用几乎任何您选择的集合/容器,这不会有很大的区别。如果是这样的话,我会选择它,因为它允许你通过一次搜索操作,在列表中的前一个和下一个项目中找到你正在寻找的项目和它的邻居。在您的情况下,如果有对包含关键帧5的LinkedListNode的引用,则可以通过使用LinkedListNode对象的“上一个”和“下一个”属性来检查上一个关键帧和下一个关键帧的位置。这很方便

如果你有一个大的数据集;首先,什么对你来说更重要,插入速度还是检索速度?不幸的是,它们走的是相反的方向,所以你必须在那里做出选择。如果检索速度是您喜欢的,那么忘记LinkedList类吧,它对于遍历大量数据来说太慢了。但是,如果您喜欢插入速度,那么LinkedList也是一个不错的选择,因为它不必在每次向列表中添加值时对所有数据进行排序。您只需在所需的位置插入一个项,它所做的只是在此处或那里更改一些指针。问题是,您必须告诉它您要将项目添加到的位置。也就是说,您仍然需要执行搜索以找到要插入项目的位置,这将非常昂贵,但仍然不会像求助于成千上万的项目那样糟糕


如果您打算以IL2CPP为目标,那么我将忘记以上所有内容,使用一个简单的数组,自己实现所有搜索、插入、排序和数组大小调整操作。因为数组中的搜索操作很可能被C++编译器所矢量化,这将给你一个大数据集的速度提升。

< P>速度方面,除非你处理了大量的数据和执行方法,否则每一帧都没有100倍。所以,别担心,只要使用任何让你更容易的方法就行了,不要这样做。

就速度而言,数组和列表或字典之间没有区别,除非你处理大量数据并在它们上执行方法,比如每帧100次。所以,别担心,只要使用任何让您更容易的方法就行了,不要这样做。

如果数组每帧有一个条目,该怎么办。数组索引==帧编号。任何数组位置都可能为空或包含keyframe属性。仍然存在需要知道keyframe属性中下一个最近帧的问题。这意味着我将遍历所有数组,以找到下一个和上一个条目。必须记住,在“关键帧”属性中推进帧时,如果你传入一个不存在的帧,它需要直接在前面和前面找到帧,以便找出动画中的位置,你说的是什么尺寸?两个分配的插槽之间的平均距离和最大距离是多少?时间线的平均值始终为0。但是,对象的关键帧可以在该时间线内的任何位置开槽。使用这个图像,如果我想从3到13开始制作动画。它将从3s位置到4s进行迭代和动画制作,因为这两个都是实际的关键帧,而从4到5,你必须根据第4帧和第13s帧位置之间的差异来假设位置,第5帧的位置是,但我的意思是,这些数字有多大?如果在下一帧之前只有10帧或100帧,这应该不是问题。如果你有10000或100000,这可能是个问题。请记住,今天的CPU每秒执行数十亿次操作。那么一个每帧有一个条目的数组呢。数组索引==帧编号。任何数组位置都可能为空或包含keyframe属性。仍然存在需要知道keyframe属性中下一个最近帧的问题。这意味着我将遍历所有数组,以找到下一个和上一个条目。必须记住,当在“关键帧”属性中推进一帧时,您通过的帧
它不存在,它需要直接找到前面和前面的帧,以便找出动画中的位置。你说的是什么尺寸?两个分配的插槽之间的平均距离和最大距离是多少?时间线的平均值始终为0。但是,对象的关键帧可以在该时间线内的任何位置开槽。使用这个图像,如果我想从3到13开始制作动画。它将从3s位置到4s进行迭代和动画制作,因为这两个都是实际的关键帧,而从4到5,你必须根据第4帧和第13s帧位置之间的差异来假设位置,第5帧的位置是,但我的意思是,这些数字有多大?如果在下一帧之前只有10帧或100帧,这应该不是问题。如果你有10000或100000,这可能是个问题。记住,今天的CPU每秒执行数十亿次操作。我可能会说,你可以完全删除你的答案并只键入:试试LinkedList。就这么简单。给鱼和教乔钓鱼。。。如果你想做后者,你必须解释你答案背后的原因。不,如果你仔细阅读,我在回答中建议的不仅仅是LinkedList。嗨,塞尔坎。我可能会说,你可以完全删除你的答案并只键入:试试LinkedList。就这么简单。给鱼和教乔钓鱼。。。如果你想做后者,你必须解释你答案背后的原因。不,如果你仔细阅读,我在回答中建议的不仅仅是LinkedList。