목표
- 값타입을 매개변수로 전달할 때 매개변수 한정자 사용에 따른 성능 알아보기
(string은 참조타입이지만 매개변수로 전달하면 복제되므로 함께 테스트)
테스트 대상
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public struct StructA
{
public long a,b,c,d,e,f,g;
public StructA(long value)
{
a = b = c = d = e = f = g = value;
}
}
public readonly struct StructB
{
public readonly long a,b,c,d,e,f,g;
public StructB(long value)
{
a = b = c = d = e = f = g = value;
}
}
int iValue = 123456;
float fValue = 123456.f;
double dValue = 123456.0;
string sValue = "qwertyuiopasdfghjkl";
테스트 방법
- struct, readonly struct, int, float, double, string 타입의 매개변수를 전달받는 메소드를 각각 매개변수 한정자 없이, in 매개변수 한정자 사용, ref 매개변수 한정자를 사용하는 형태로 만들어 반복 호출하며 시간을 측정한다.
테스트 결과
- 반복 횟수 : 2천만 번(string은 200만 번)
결론
1. Value Type(int, float, double, …), String
- 유의미한 차이가 없다. 원래 의도대로 사용하면 된다.
2. Struct Type
- 무조건 ref나 in을 붙여주는 것이 이득이다.