首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效获取数组子集

高效获取数组子集
EN

Stack Overflow用户
提问于 2008-11-06 12:33:22
回答 4查看 12.3K关注 0票数 5

有没有一种有效的方法来获取C#数组的子集并将其传递给另一段代码(而无需修改原始数组)?我使用的是CUDA.net,它具有将数组复制到图形处理器的功能。例如,我希望将数组的十分之一传递给函数,从而将数组的每十分之一分别复制到GPU (用于流水线目的)。

以这种方式复制数组应该与一次性复制一样有效。这可以用不安全的代码和引用正确的内存位置来完成,但除此之外,我不确定。CopyTo函数将整个数组复制到另一个数组中,因此这似乎没有什么用处。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-11-06 12:59:50

好吧,我之前误解了这个问题。

您需要的是System.Buffer.BlockCopySystem.Array.Copy

LINQ方式的效率将非常低。如果您能够重用要复制到的缓冲区,这也将有助于提高效率,避免每次都创建新的数组-只需在顶部复制即可。除非你能平均分配你的“大”数组,否则在最后一种情况下你需要一个新的数组。

票数 12
EN

Stack Overflow用户

发布于 2008-11-06 12:46:29

我不确定这有多有效但是..。

代码语言:javascript
复制
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
}
票数 3
EN

Stack Overflow用户

发布于 2008-11-06 13:43:28

如果需要从字节数组转到非托管指针,可以尝试使用Marshal.Copy。这就避免了自己创建不安全的代码。

编辑:这显然只有当你重新实现他们的API时才会起作用。抱歉-被误解了。您需要一个高效的子数组方法。

我突然意识到,您真正需要的是表单的原始类中的api

代码语言:javascript
复制
void CopyToGpu(byte[] source, int start, int length);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/268513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档