可能重複:
C#: Any faster way of copying arrays?C#:如何有效地複製一大堆結構體?
我有結構的一個這樣的數組:
struct S
{
public long A;
public long B;
}
...
S[] s1 = new S[1000000];
...
S[] = new S[s1.Length];
// Need to create a copy here.
我可以使用不安全的模式和結構的源陣列複製到字節數組,然後從字節數組到結構的目標數組。但這意味着我將不得不分配一個巨大的中間字節數組。有沒有辦法避免這種情況?是否有可能以某種方式將目標數組表示爲字節數組並直接複製到那裏?
unsafe
{
int size = Marshal.SizeOf(s0[0]) * s0.Length;
byte[] tmp = new byte[size];
fixed (var tmpSrc = &s0[0])
{
IntPtr src = (IntPtr)tmpSrc;
Marchal.Copy(tmpSrc, 0, tmp, 0, size);
}
// The same way copy to destination s1 array...
}
你有沒有試過只是做一個正常的數組副本,並做了性能測試呢?在優化之前驗證正常路線不太慢。 – Servy
@PeterRitchie刪除我的評論。實際上使用Buffer.BlockCopy可能是要去的。但問題仍然有效。也許不是從實際的角度:) – Schultz9999
看起來像合理的路標複製...考慮不刪除。 –