가능한 중복 : 나는 안전하지 않은 모드를 사용하고에 구조체의 소스 배열을 복사 할 수 있습니다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
복제에 합리적인 푯말처럼 보이는 ... 삭제하지 마십시오. –