有没有一种有效的方法来获取C#数组的子集并将其传递给另一段代码(而无需修改原始数组)?我使用的是CUDA.net,它具有将数组复制到图形处理器的功能。例如,我希望将数组的十分之一传递给函数,从而将数组的每十分之一分别复制到GPU (用于流水线目的)。
以这种方式复制数组应该与一次性复制一样有效。这可以用不安全的代码和引用正确的内存位置来完成,但除此之外,我不确定。CopyTo函数将整个数组复制到另一个数组中,因此这似乎没有什么用处。
发布于 2008-11-06 12:59:50
好吧,我之前误解了这个问题。
您需要的是System.Buffer.BlockCopy或System.Array.Copy。
LINQ方式的效率将非常低。如果您能够重用要复制到的缓冲区,这也将有助于提高效率,避免每次都创建新的数组-只需在顶部复制即可。除非你能平均分配你的“大”数组,否则在最后一种情况下你需要一个新的数组。
发布于 2008-11-06 12:46:29
我不确定这有多有效但是..。
int[] myInts = new int[100];
//Code to populate original arrray
for (int i = 0; i < myInts.Length; i += 10)
{
int[] newarray = myInts.Skip(i).Take(10).ToArray();
//Do stuff with new array
}发布于 2008-11-06 13:43:28
如果需要从字节数组转到非托管指针,可以尝试使用Marshal.Copy。这就避免了自己创建不安全的代码。
编辑:这显然只有当你重新实现他们的API时才会起作用。抱歉-被误解了。您需要一个高效的子数组方法。
我突然意识到,您真正需要的是表单的原始类中的api
void CopyToGpu(byte[] source, int start, int length);https://stackoverflow.com/questions/268513
复制相似问题