从共享 ArrayPool 中租用和返回 C# 中的多维数组的正确方法?
Posted
技术标签:
【中文标题】从共享 ArrayPool 中租用和返回 C# 中的多维数组的正确方法?【英文标题】:Correct way of Renting and Returning a multi-dimensional array in C# from shared ArrayPool? 【发布时间】:2021-07-17 18:43:14 【问题描述】:例如,这是正确的使用场景吗?
// Rent
var rentedArray = ArrayPool<int[]>.Shared.Rent(2);
rentedArray[0] = ArrayPool<int>.Shared.Rent(10);
rentedArray[1] = ArrayPool<int>.Shared.Rent(10);
// Return
foreach (var array in rentedArray)
ArrayPool<int>.Shared.Return(array, true);
ArrayPool<int[]>.Shared.Return(rentedArray, true);
【问题讨论】:
@Dalorzo 抱歉,我不太明白你在问什么?一般来说,从共享 ArrayPool 中租用和返回多维数组是这样完成的吗? 你读过field manual吗? @NicholasHunter 是的,我有,我只是想确保这是租用多维数组的正确方法。 您的代码是正确的,关于如何使用API来租用和返回数组正在使用中。 @mm8 这就是我想知道的,谢谢。 【参考方案1】:就如何使用 API 租用和返回数组而言,您的代码是正确的。
您使用Rent
API 租用具有最小指定长度的数组,将其存储在一个变量中,然后使用Return
API 返回相同的数组。
【讨论】:
我有点困惑,但是返回锯齿状数组不会也返回其他数组吗?如果我可以要求一个特定的用例:想象你必须在一个数组中填充数据 10 次 - 你会租用并返回 10 次数组,还是租一次,然后清理它9 次?谢谢mm8。 不,您只租用并归还特定实例。出租、使用、清洁、归还。【参考方案2】:为了澄清术语,这通常称为“锯齿状数组”或数组数组。
例如:
int[][] jaggedArray = new int[2][];
jaggedArray[0] = new int[10];
jaggedArray[1] = new int[10];
与俗称的“多维数组”对比:
int[,] dimensionalArray = new int[2,10];
看起来 ArrayPool 类只处理一维数组,所以你的锯齿状数组方法可能是你想要的。
代码将不太清楚..考虑一下外部数组缓冲区是否真的需要,对于您的场景..如果是的话,如何以与可读不同的方式命名它内部数组缓冲区。
【讨论】:
以上是关于从共享 ArrayPool 中租用和返回 C# 中的多维数组的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章