20/30 개체처럼 루핑 중이거나 작은 숫자를 다루는 다른 경우에는 int 대신 short를 사용하는 것이 좋습니다.짧은 사용시기는?
나는 왜이 일반적이지 의미 : 그것은 성능 향상이 너무 낮기 때문에
for(short i=0; i<x; i++)
Method(array[i]);
인가?
감사합니다.
20/30 개체처럼 루핑 중이거나 작은 숫자를 다루는 다른 경우에는 int 대신 short를 사용하는 것이 좋습니다.짧은 사용시기는?
나는 왜이 일반적이지 의미 : 그것은 성능 향상이 너무 낮기 때문에
for(short i=0; i<x; i++)
Method(array[i]);
인가?
감사합니다.
"는 것이 좋습니다 대신 INT의 짧은 사용하는 것입니다?"
우선, 이는 예상되는 결과를 달성하지 못하는 미세 최적화입니다. 즉, 속도 또는 효율을 높입니다.
두 번째 : 아니요, 실제로 CLR은 내부적으로 32 비트 정수 (Int32)를 사용하여 반복을 수행합니다. 기본적으로 JIT 컴파일 중에 계산 목적으로 short를 Int32로 변환합니다.
세 번째 : 배열 인덱스는 Int32이며 반복 인덱싱 반복자는 배열 인덱서로 사용될 때 자동으로 int32로 변환됩니다. 우리가 다음 코드를 가지고가는 경우
는 :
var array = new object[32];
var x = array.Length;
for (short i = 0; i < x; i++)
Method(array[i]);
그리고 분해를, 당신은 기계 수준에서 32 비트 레지스터가 잘린 옆에있는 반복하는 변수 (EAX)에 사용되는 것을 00000089 inc eax
에서 분명히 볼 수 있습니다 ~ 16 비트로 0000008a movsx eax,ax
int32를 사용하는 짧은 짧은 사용으로 인한 이점이 없으므로 실행해야 할 추가 지침으로 인해 약간의 성능 손실이 발생할 수 있습니다. 의
00000042 nop
var array = new object[32];
00000043 mov ecx,64B41812h
00000048 mov edx,20h
0000004d call FFBC01A4
00000052 mov dword ptr [ebp-50h],eax
00000055 mov eax,dword ptr [ebp-50h]
00000058 mov dword ptr [ebp-40h],eax
var x = array.Length;
0000005b mov eax,dword ptr [ebp-40h]
0000005e mov eax,dword ptr [eax+4]
00000061 mov dword ptr [ebp-44h],eax
for (short i = 0; i < x; i++)
00000064 xor edx,edx
00000066 mov dword ptr [ebp-48h],edx
00000069 nop
0000006a jmp 00000090
Method(array[i]);
0000006c mov eax,dword ptr [ebp-48h]
0000006f mov edx,dword ptr [ebp-40h]
00000072 cmp eax,dword ptr [edx+4]
00000075 jb 0000007C
00000077 call 657A28F6
0000007c mov ecx,dword ptr [edx+eax*4+0Ch]
00000080 call FFD9A708
00000085 nop
for (short i = 0; i < x; i++)
00000086 mov eax,dword ptr [ebp-48h]
00000089 inc eax
0000008a movsx eax,ax
0000008d mov dword ptr [ebp-48h],eax
00000090 mov eax,dword ptr [ebp-48h]
00000093 cmp eax,dword ptr [ebp-44h]
00000096 setl al
00000099 movzx eax,al
0000009c mov dword ptr [ebp-4Ch],eax
0000009f cmp dword ptr [ebp-4Ch],0
000000a3 jne 0000006C
예. 성능 차이는 무시할 수 있습니다. 그러나 short는 int 대신 32 비트가 아닌 16 비트를 사용하기 때문에 충분한 작은 숫자를 처리하는 경우 short를 사용하는 것이 좋습니다.
일반적으로 프로세서의 단어 크기와 일치하는 숫자를 사용하면 일치하지 않는 숫자보다 상대적으로 빠릅니다. 반면에 short는 int보다 메모리 공간을 덜 사용합니다. 제한된 메모리 공간이있는 경우 단락을 사용하는 것이 좋습니다. 개인적으로 C# 응용 프로그램을 작성할 때 개인적으로 그런 일이 발생하지 않았습니다.
int
은 32 비트 메모리를 사용하고, short
은 16 비트를 사용하고 byte
은 8 비트를 사용합니다. 20/30 개의 객체를 반복하면서 메모리 사용에 대해 염려한다면 byte
을 대신 사용하십시오.
int
을 사방에 사용하는 것이 게으른 것이라고 주장 할 수 있지만,이 수준의 메모리 사용량에 대한 요식은 거의 필요하지 않습니다. 개인적으로 항상 최소한의 메모리를 사용하는 관련 유형을 사용하려고합니다.
http://msdn.microsoft.com/en-us/library/5bdb6693(v=vs.100).aspx
중복 [INT16 대 .NET 정수?] (http://stackoverflow.com/questions/129023/net-integer-vs-int16)의 –
가능한 복제 [INT16 대 .NET 정수? (https://stackoverflow.com/questions/129023/net-integer-vs-int16) – DavidRR