반응형 C#34 Linq의 처리속도개선 방법 일반적으로 Linq의 처리속도는 빠른편이 아니라서 복잡한 처리와 많은 데이터의 처리시에 속도가 느려지는 경우가 있습니다. 처리속도의 최적화를 위한 3가지 방법이 있으므로 참고해서 해보시면 좋겠습니다. 1. 데이터의 건수를 취득할 경우에는 Count로 결과값을 받지 않도록 합니다. 해결방법으로는 Count의 경우에는 처리속도가 데이터가 많으면 많을수록 느려지므로 Any형태로 받는것을 추천드립니다. IEnumerable data = //클래스선언 및 데이터설정 //데이터가 많을수록 처리속도가 느려집니다 if(data.Count() > 0) { //data의 건수가 1건 이상일 경우에만 처리 } //데이터의 처리를 최소화합니다. if(data.Any()) { //data의 건수가 1건 이상일 경우에만 처리 }.. C# 2022. 6. 27. BackgroundWorker이벤트에 설정된 처리(DoWork)를 취소하는 방법 BackgroundWorker이벤트에 설정된 처리를 취소하는 방법 입니다. 작업순서는 다음과 같습니다. ① BackgroundWorker이벤트의 취소처리를 유효화 합니다. //백그라운드 실행생성 BackgroundWorker worker = new BackgroundWorker(); //백그라운드 취소유효화 worker.WorkerSupportsCancellation = true; ② BackgroundWorker이벤트의 실제처리를 Thread로 처리 합니다. //처리내용을 쓰레드처리 var progressThread = new Thread(() => { //처리내용추가 //100초동안 Progress처리(샘플) Thread.Sleep(100000); }); //쓰레드처리실행 progressThread... C# 2022. 4. 20. C# Linq의 Group By가 복수로 필요할 경우의 처리방법 1. 원인 : 원본 데이터(DB테이블, List형식등)의 그룹으로 나눠서 일단 데이터를 추합한 후에 최종적으로 필요한 데이터를 추출할 경우가 대상이 될 경우 2. 처리방법 : 기본적인 처리순서는 원본 데이터의 최소한의 조건(Where)을 처리한 후에 그룹(Group By)을 설정하고 그 결과를 조회(Select)해서 필요한 항목(컬럼)을 추출하면 일단 첫번째 그룹처리는 완료됩니다. 그후에 최종적으로 필요한 데이터를 추출하기 위한 그룹(Group By)을 설정하고 필요한 항목(컬럼)을 추출하면 원한은 데이터가 나옵니다. 기본적인 코드는 다음과 같습니다. var result = from dataoriginal(원번데이터명) in data(DB테이블이나 List형식의데이터등) where (데이터 추출 조건 설.. C# 2022. 1. 31. 대용량 데이터 등록(SqlBulkCopy)시 트랙잭션(Transaction) 에러가 발생할때의 대응방법 1. 원인 : Sql커낵션(Sql Connection) 설정시에 트랜잭션(Transaction)이 설정된 상황에서 SqlBulkCopy설정에 트랜잭션을 설정하지 않을경우에 발생합니다. 2. 해결방법 : SqlBulkCopy설정에 트랜잭션을 추가로 설정해주면 정상적으로 데이터가 등록됩니다. 3.샘플코드 try { //시스템에 공통으로 사용되는 Sql커낵션 접속 sqlConnection.Open(); //Sql 트랜잭션생성 var sqlTransaction = sqlCon.BeginTransaction(); try { //SqlBulkCopy 트랜잭션설정 var sqlBulkCopy = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.Default, sqlTransa.. C# 2022. 1. 30. DataGrid의 Binding ItemSource 업데이트하기 1. 전재조건으로는 DataGridTemplateColumn DataTemplate안의 컨트롤의 Binding Update가 정상적으로 이뤄지지 않을때 사용합니다. 2. Binding시에 추가로 UpdateSourceTrigger=PropertyChanged 설정해주는 것만으로도 변경된 값이 ItemSource에 반영됩니다. 3. 샘플코드는 TextBox의 경우 Text를 변경할시에 ItemSource가 정상적으로 업데이트되어 변경된 Text정보가 반영됩니다. C# 2021. 8. 29. LINQ Repeat 사용법 Repeat는 특정의 정수값을 복수로 필요할 때 사용 됩니다. 샘플코드에서는 특정 정수값과 필요하는 갯수의 값을 선언하고 결과값을 확인할 수 있습니다. public static class Program { static void Main(string[] args) { // 정수값10의 리스트10개 IEnumerable intSequence1 = Enumerable.Repeat(10, 10); // 정수값50의 리스트5개 IEnumerable intSequence2 = Enumerable.Repeat(50, 5); // 정수값-5의 리스트3개 IEnumerable intSequence3 = Enumerable.Repeat(-5, 3); // 각각의 정수값을 출력 System.Console.WriteLine(.. C# 2021. 8. 13. LINQ Range 사용법 Range는 특정 범위의 정수값이 필요할 때 사용 됩니다. 샘플코드에서는 각각의 가져올 정수값의 범위를 선언하고 결과값을 확인할 수 있습니다. public static class Program { static void Main(string[] args) { // 1부터 시작하는 10개의 정수값 IEnumerable intSequence1 = Enumerable.Range(1, 10); // -9부터 시작하는 5개의 정수값 IEnumerable intSequence2 = Enumerable.Range(-9, 5); // 50부터 시작하는 50개의 정수값 IEnumerable intSequence3 = Enumerable.Range(50, 50); // 각각의 정수값을 출력 System.Console.Wri.. C# 2021. 8. 9. LINQ ToLookup 사용법 ToLookup는 컬렉션(List, Array, Dictionay)의 요소중에서 특정 데이터의 키값을 가지고 데이터를 가져올때 사용됩니다. 샘플코드에서는 학생의 점수를 클래스의 키값으로 각 클래스에 속한 학생의 점수를 가져올 수 있습니다. private class TestResult { /// /// 소속 클래스 /// public string Class { get; set; } /// /// 성명 /// public string Name { get; set; } /// /// 점수 /// public int Score { get; set; } /// /// 출력문자열 /// /// public override string ToString() { return string.Format("Class:{0},.. C# 2021. 7. 30. LINQ Intersect 사용법 Intersect는 컬렉션(List, Array, Dictionay)간의 요소중에서 컬렉션에 중복으로 포함되는 요소를 찾을 때 사용됩니다. 샘플코드에서는 숫자 리스트간의 비교를 통해서 중복 요소를 찾을 수 있습니다. static void Main(string[] args) { // 비교할 숫자리스트 int[] numbers1 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int[] numbers2 = new int[] { 2, 4, 6, 8, 10 }; //숫자리스트1을 기준으로 숫자리스트2에 중복으로 포함된 값만 가져온다. IEnumerable results = numbers1.Intersect(numbers2); // 숫자리스트1, 숫자리스트2, 중복숫자 결과값 .. C# 2021. 7. 28. LINQ Except 사용법 Except는 컬렉션(List, Array, Dictionay)간의 요소중에서 컬렉션에 중복으로 포함되는 요소를 제외한 유일한 요소를 찾을때 사용됩니다. 샘플코드에서는 숫자 리스트간의 비교를 통해서 유일한 요소를 찾을 수 있습니다. static void Main(string[] args) { // 비교할 숫자리스트 int[] numbers1 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int[] numbers2 = new int[] { 2, 4, 6, 8, 10 }; //숫자리스트1을 기준으로 숫자리스트2에 포함되어 있는 값을 제외한다. IEnumerable results = numbers1.Except(numbers2); // 숫자리스트1, 숫자리스트2, 숫자비교.. C# 2021. 7. 27. LINQ BinarySearch 사용법 BinarySearch는 컬렉션(List, Array, Dictionay)의 요소의 검색결과의 인덱스값을 확인할 때 사용합니다. 샘플코드는 10개의 숫자를 설정한 리스트에서 값이 72인 인덱스 값을 확인할 수 있습니다. 특이점은 검색조건의 값이 복수로 존재할 때도 한개의 인덱스 값만을 확인할 수 있는 점입니다. // 검색용 리스트 생성 List number = new List(); // 숫자리스트에 값을 설정 for (int i = 1; i C# 2021. 7. 26. LINQ Zip 사용법 Zip는 데이터 컬렉션(List, Array, Dictionay)의 각각의 요소를 병합할 때 사용됩니다. 다른 형태의 컬렉션도 타입이 맞는다면 병합이 가능합니다. 특이사항으로는 Concat와 다른점은 각각의 스퀀스(순번)가 맞는 요소간의 병합만 가능하다는 점이 다릅니다. 샘플코드는 숫자 데이터의 덧셈 결과를 확인할 수 있습니다. public static class Program { static void Main(string[] args) { // 숫자데이터1,2 샘플데이터 생성 int[] numbers1 = new int[] { 1, 2, 3, 4, 5 }; float[] numbers2 = new float[] { 5, 4, 3 }; // 숫자데이터1 + 숫자데이터2의 덧셈 처리 IEnumerable .. C# 2021. 7. 25. 이전 1 2 3 다음 반응형