【发布时间】:2014-11-02 18:20:28
【问题描述】:
我有这个字节数组:
byte[,,] somedata = new byte[100,150,3];
~somedata is now populated by an external input.
我只想使用以下值:
byte[,] useThisDataOnly = new byte[100,150];
目前,我使用这个:
foreach (int x=0,x< 100; x++)
{
foreach (int y=0,y< 150; y++)
{
useThisDataOnly [x,y] = somedata[x,y,0];
}
}
有没有更快的方法来做到这一点?
另外,我将把这个 useThisDataOnly 扁平化(因为我听说它操作起来更快)。
有什么建议吗?
【问题讨论】:
-
更快、更高性能是什么意思?在这些数组大小下,除非您经常这样做,否则无关紧要。
-
@thumbmunkeys 嗨,感谢您的时间和评论,是的,我被要求每秒接收许多这样的数组(呻吟 - 我无法控制)。我想我在这里问了两个问题。我的主要重点是将 3dim 转换为 2dim,而无需在低内存使用情况下使用 foreach 并且尽可能快:)
-
嗨@AlexFarber 一个很好的链接(我+1)但示例显示[,]到[]。我理想地追求的是 [,,] 到 []?
-
我建议不要预先优化内存,而是先尝试快速和脏循环,然后测量性能。然后你就会知道如果这是个问题。如果是这样,请查看并行性;请参阅任务并行库
-
您总是可以拥有一个 C++/CLI 库(允许您编写真正的非托管代码并将其反馈给普通的 C# 应用程序)来完成密集的方面。但我的猜测是,如果您可以将工作分成 4/8 部分并执行并行任务,您将获得所需的性能。