Ami*_*mit 1 c# arrays optimization memory-management winforms
我有一个共有5000个元素的数组,在一个功能中,我只需要最后3000个元素才能继续进行.
为此,我尝试了以下解决方案.
//skipping first 2000 elements
list = list.Skip(5000 - 3000).ToArray();
Run Code Online (Sandbox Code Playgroud)
这个解决方案实际上给了我想要的解决方案,但是当我在我的代码上运行分析器时,它在这一行显示了大量的内存分配.
由于遗留下来,我必须使用Array.并且非常频繁ToArray()似乎对性能没有好处.
还有可能的解决方案,
//reversing whole list
Array.Reverse(list);
//restricting size of an array to 3000,
//so first (as reversed the list, they are last 3000 elements)
Array.Resize(ref list, 3000);
//again reversing list to make it proper order
Array.Reverse(list);
Run Code Online (Sandbox Code Playgroud)
但是时间复杂度更差.
有没有更好的解决方案,不需要从List到Array?
如果你绝对必须使用数组,那么Array.Copy可能是你的朋友:
int[] smallerArray = new int[array.Length - 2000];
Array.Copy(array, 2000, smallerArray, 0, smallerArray.Length);
Run Code Online (Sandbox Code Playgroud)
我希望它比使用Take后续效率更高效ToArray.
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |