LINQ란 Language Integrated Query 라고해서 특정 데이터들에서 Query를 하여 데이터를 빠르고 편리하게 추출하는 방식이라 할 수 있다. 해당기능은 C# 3.0부터 추가가 되기 시작한 문법이다. 기본적으로 람다표현식을 사용하여 간결하고 가독성 좋게 작성 가능하다. Query를 하는데에는 SQL을 사용한다. SQL 이란 Structured Query Language의 약자이다.
LINQ는 이러한 SQL의 문법을 가지고 다양한 쿼리를 통해 데이터를 가공하고 집계하는 등에 사용된다. 전통적인 방싱그로 for문과 if문을 가지고 특정 데이터들을 가공하고 집계내는 것도 가능하다. 하지만 LINQ를 이용하면 빠르고 정확하게 데이터를 찾는 것이 가능하다. 그리고 더욱 중요한 가독성이 좋다. 문장을 서술 하듯 질의를 하기 때문에 for와 if문을 사용하는 방식보다 가독성이 좋아 실수를 줄이고 유지보수가 쉽다.
LINQ에 자세한 내용은 아래 링크를 참고하자.
http://hijuworld.tistory.com/56
LINQ는 기본적으로 쿼리를 실행하는데 1개의 스레드를 사용한다. 즉 cpu 하나만을 사용해서 처리한다.
하지만 병렬 LINQ(PLINQ)는 여러개의 스레드를 사용해서 쿼리를 실행한다. cpu에 갯수가 많을수록 많은 스레드를 만들어 처리한다.
물론 멀티 스레드가 싱글 스레드를 사용하는 것보다 속도가 더 빠르지 않다. 그래서 무조건 병렬 Linq를 사용하는 것보단 실제 테스트를 해보고 상황에 맞게 판단해서 사용하도록 하자.
아래예제는 1부터 5억까지의 수를 각각 2.1로 나누어 하나의 배열로 만드는 LINQ를 작성하고 해당 LINQ에 처리 시간을 측정하도록 했다. 싱글 스레드를 사용하는 방식이다.
시간측정에 Stopwatch 클래스를 사용했다. 시간측정에관한 자세한 내용은 아래 링크를 참고하자.
C# Stopwatch 클래스를 사용하여 프로그램 실행 시간 측정 하기 : http://hijuworld.tistory.com/18
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace LINQ_TEST { class Program { static void Main(string[] args) { Stopwatch stopwatch = new Stopwatch();//시간측정 객체 IEnumerable<int> bigNumber = Enumerable.Range(1, 500_000_000); Console.Write("아무키나 입력하시오."); Console.ReadLine(); //키입력받기 stopwatch.Start(); //시간측정 시작 var result = bigNumber.Select(number => number/2.1).ToArray(); stopwatch.Stop(); //시간측정 끝 System.Console.WriteLine("time : " + stopwatch.ElapsedMilliseconds + "ms"); } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace Ch09_PLINQ { class Program { static void Main(string[] args) { Stopwatch stopwatch = new Stopwatch();//시간측정 객체 IEnumerable<int> bigNumber = Enumerable.Range(1, 500_000_000); Console.Write("아무키나 입력하시오."); Console.ReadLine(); //키입력받기 stopwatch.Start(); //시간측정 시작 var result = bigNumber.AsParallel() .Select(number => number/2.1).ToArray(); stopwatch.Stop(); //시간측정 끝 System.Console.WriteLine("time : " + stopwatch.ElapsedMilliseconds + "ms"); } } } | cs |
'닷넷,C#,.NET' 카테고리의 다른 글
C# 파일 이름, 확장자, 크기(용량), 수정 일자, 속성 등 알아내기 (1) | 2018.07.05 |
---|---|
C# 파일 및 디렉터리 생성, 삭제, 복사, 존재여부 검사 등 (0) | 2018.07.03 |
C# LINQ 집계함수(Sum,MAX,MIN,Average,count,Aggregate 등) (0) | 2018.06.14 |
C# LINQ 사용 방법 및 예제 from, select, where, order by (0) | 2018.06.13 |
C# LOH(Large Object Heap)의 가지비 컬렉션 방식 (0) | 2018.05.15 |