답변:
using System.Linq;
...
double total = myList.Sum(item => item.Amount);
이러한 테스트를하기 위해 실행할 수있는 예제 코드는 다음과 같습니다.
var f = 10000000;
var p = new int[f];
for(int i = 0; i < f; ++i)
{
p[i] = i % 2;
}
var time = DateTime.Now;
p.Sum();
Console.WriteLine(DateTime.Now - time);
int x = 0;
time = DateTime.Now;
foreach(var item in p){
x += item;
}
Console.WriteLine(DateTime.Now - time);
x = 0;
time = DateTime.Now;
for(int i = 0, j = f; i < j; ++i){
x += p[i];
}
Console.WriteLine(DateTime.Now - time);
복잡한 객체의 동일한 예는 다음과 같습니다.
void Main()
{
var f = 10000000;
var p = new Test[f];
for(int i = 0; i < f; ++i)
{
p[i] = new Test();
p[i].Property = i % 2;
}
var time = DateTime.Now;
p.Sum(k => k.Property);
Console.WriteLine(DateTime.Now - time);
int x = 0;
time = DateTime.Now;
foreach(var item in p){
x += item.Property;
}
Console.WriteLine(DateTime.Now - time);
x = 0;
time = DateTime.Now;
for(int i = 0, j = f; i < j; ++i){
x += p[i].Property;
}
Console.WriteLine(DateTime.Now - time);
}
class Test
{
public int Property { get; set; }
}
컴파일러 최적화를 해제 한 결과는 다음과 같습니다.
00:00:00.0570370 : Sum()
00:00:00.0250180 : Foreach()
00:00:00.0430272 : For(...)
두 번째 테스트는 다음과 같습니다.
00:00:00.1450955 : Sum()
00:00:00.0650430 : Foreach()
00:00:00.0690510 : For()
LINQ가 일반적으로 foreach (...)보다 느린 것처럼 보이지만 이상한 점은 foreach (...)가 for 루프보다 빠르다는 것입니다.
Stopwatch
있는 System.Diagnostics
이 고성능 시간 레코더로합니다. (내가 BTW 당신을 downvote하지 않았다)
DateTime.Now
측정 에는 사용하지 마십시오 . 항상 현지 시간을 반환하므로 성능이 끔찍합니다. DateTime.UtcNow
가 더 빠르다; 그러나 여전히 Stopwatch
클래스 만큼 높은 해상도를 사용하지는 않습니다 .