foreach 루프 내부 또는 외부에서 변수 선언 : 어느 것이 더 빠르거나 더 낫습니까?
이 중 어느 것이 더 빠르거나 더 좋은가요?
이 하나:
List<User> list = new List<User>();
User u;
foreach (string s in l)
{
u = new User();
u.Name = s;
list.Add(u);
}
또는 이거 :
List<User> list = new List<User>();
foreach (string s in l)
{
User u = new User();
u.Name = s;
list.Add(u);
}
내 초보자 개발 기술은 첫 번째 것이 더 낫다고 말하지만 내 친구는 나에게 잘못했다고 말하지만 두 번째 것이 더 좋은 이유를 알 수 없습니다.
성능에 전혀 차이가 있습니까?
성능면에서 두 예제는 동일한 IL로 컴파일되므로 차이가 없습니다.
두 번째는 u
루프 내에서만 사용되는 경우 의도를 더 명확하게 표현하기 때문에 더 좋습니다 .
어쨌든 가장 좋은 방법은 Name ...을받는 생성자를 사용하는 것입니다. 그렇지 않으면 중괄호 표기법을 사용합니다.
foreach (string s in l)
{
list.Add(new User(s));
}
또는
foreach (string s in l)
{
list.Add(new User() { Name = s });
}
또는 더 나은 LINQ :
var list = l.Select( s => new User { Name = s});
이제 첫 번째 예제는 어떤 경우에는 눈에 띄지 않을 정도로 빠르지 만 두 번째 예제는 더 읽기 쉽기 때문에 더 좋으며 컴파일러는 foreach
의 범위 밖에서 사용되지 않으므로 변수를 버릴 수 있습니다 (모두 생략) .
선언으로 인해 코드가 실행되지 않으므로 성능 문제가 아닙니다.
두 번째는 의미하는 바이며 두 번째 방법으로 수행하면 어리석은 오류를 만들 가능성이 적으므로 그것을 사용하십시오. 항상 필요한 최소 범위에서 변수를 선언하십시오.
게다가 더 좋은 방법은 Linq를 사용하는 것입니다.
List<User> users = l.Select(name => new User{ Name = name }).ToList();
성능에 대한 질문이있을 때마다 측정 만하면됩니다. 테스트를 반복하고 시간을 측정하는 것입니다.
측정하지 않고 :-) 또는 생성 된 ilasm을 보지 않고 질문에 대답하려면 의미있는 반복 횟수와 코드에서 가장 비용이 많이 드는 작업에서 차이가 눈에 띄지 않을 것입니다. 몇 가지 주문에 의한 사용자 할당 일 가능성이 있습니다 따라서 코드 명확성에 집중하고 (일반적으로해야하는 것처럼) 2로 이동합니다.
오, 늦었어요. 이런 일에 대해 걱정하지 말라고 말하려고하거나 이런 세부 사항에 얽매이지 마세요.
케이
두 번째가 더 좋습니다. 당신은 각 반복에서 새로운 사용자를 갖는 것을 의미합니다.
기술적으로 첫 번째 예제는 새로운 변수를 할당하기 위해 스택 프레임을 이동할 필요가 없기 때문에 몇 나노초를 절약 할 수 있습니다.하지만 이것은 컴파일러가 인식하지 못하는 CPU 시간이 너무 적습니다. 차이를 최적화하십시오.
In this scenario, the second version is better.
In general, if you only need to access the value within the body of the iteration, then choose the second version. On the other hand, if there is some final state the variable will hold beyond the body of the loop, then declare then use the first version.
There should be no percievable difference in performance.
Another reference which looks like above:
'code' 카테고리의 다른 글
힘내 풀과 힘내 리베이스 (0) | 2020.09.25 |
---|---|
Windows의 응용 프로그램에 Ctrl-C (SIGINT)를 보낼 수 있습니까? (0) | 2020.09.25 |
할당 된 값이 아닌 단위로 평가하는 Scala 할당의 동기는 무엇입니까? (0) | 2020.09.25 |
관련된 모든 Django 모델 개체 가져 오기 (0) | 2020.09.25 |
jQuery UI 자동 완성에서 HTML 사용 (0) | 2020.09.25 |