반응형

프로그래밍/C# 31

[C#] MessagePack-CSharp을 이용한 고성능 객체 직렬화 및 역직렬화

C#에서 객체를 직렬화 및 역직렬화하는 여러 가지 방법 중, 성능과 효율성 측면에서 뛰어난 MessagePack-CSharp에 대해 알아보겠습니다. MessagePack는 이진 형식을 사용하여 JSON보다 더 작은 크기와 더 빠른 처리 속도를 제공합니다. MessagePack-CSharp 라이브러리 설치 먼저, 프로젝트에 MessagePack-CSharp 라이브러리를 설치해야 합니다. NuGet 패키지 관리자를 사용하여 설치할 수 있습니다. 직렬화 및 역직렬화를 위한 클래스 준비 MessagePack를 사용하여 직렬화 및 역직렬화할 클래스에 [MessagePackObject] 특성을 추가하고, 모든 필드 또는 속성에 [Key] 특성을 지정합니다. using MessagePack; [MessagePackO..

프로그래밍/C# 2023.04.14

[C#] List<object>를 특정 클래스 타입의 List로 캐스팅하는 방법

오늘은 C#에서 List를 특정 클래스 타입의 List로 캐스팅하는 방법에 대해 알아보겠습니다. 가끔 우리는 List에 특정 클래스 타입의 객체만 포함되어 있다는 것을 알고 있지만, 이를 해당 클래스 타입의 List로 변환해야 하는 상황이 있습니다. 이 경우, LINQ를 사용하여 쉽게 캐스팅할 수 있습니다. 예를 들어, ImageData라는 클래스 타입의 객체만 포함된 List가 있다고 가정해봅시다. 이제 이 List를 List로 캐스팅하고자 합니다. 먼저, 필요한 네임스페이스를 추가합니다. using System.Collections.Generic; using System.Linq; 다음으로, 이미 존재하는 List를 List로 변환하기 위해 LINQ의 OfType 메서드를 사용합니다. List obj..

프로그래밍/C# 2023.03.27

[C#] Class & Struct Performance Test

c#에서 사람들은 너무 무자비하게 Class만 사용한다. 하지만 실제 성능은 어떨까? stack과 heap의 차이라 너무 명백한 성능을 차이를 보이지만 똥인지 된장인지 찍어먹어봐야 아는 사람들이 있으니 이것을 보고 주니어를 졸업하도록 하자. https://mdfarragher.medium.com/whats-faster-in-c-a-struct-or-a-class-99e4761a7b76 What Is Faster In C#: A Struct Or A Class? What do you think is faster: filling an array with one million structs, or filling an array with one million classes? mdfarragher.medium.c..

프로그래밍/C# 2022.12.13

[C#] Oracle Bulk Insert

public class TableA { public string A { get; set; } public string B { get; set; } public string C { get; set; } } 만약 위와 같은 테이블 레이아웃을 가지는 Bulk data 가 있다고 하자. 만약 한 두건 정도면 쿼리로 넘기면 되지만 만건 10만건 정도 되는 데이터를 넘길때는 OracleParameter와 ArrayBindCount를 이용하여 한꺼번에 보낸다. 아래의 코드는 1000건씩 Insert하는 코드를 첨부하였다. public async Task BulkInsert(List result) { using (OracleConnection conn = new OracleConnection(_connectInfo))..

프로그래밍/C# 2022.04.01

[C#] Newtonsoft JsonConverter 사용하기

C# 개발자에겐 거의 필수적으로 사용되는 Newtonsoft.json은 Json data를 직렬화 및 역직렬화를 제공하는 강력한 오픈 소스다. 이번은 JsonConverter에 대해 설명을 해보고자 한다. 직렬화와 역직렬화를 사용할 때, 받은 데이터를 혹은 내보내는 데이터를 다른 형태로 바꿀 일이 종종 생긴다. 그럼 굳이 받은 데이터를 하나하나 얻어서 새로운 객체를 만드는 코드를 집어 넣지 않고, 아래와 같이 JsonConverter를 사용하여 바로 처리 가능하다. [JsonConverter(typeof(TestConverter))] public class ClassA { public double A1 { get; set; } public double A2 { get; set; } public doubl..

프로그래밍/C# 2022.03.30

[C#] Oracle 연결 시 예외 발생 문제

C#에서 Oracle을 연결해서 사용하는데 정상적으로 접속은 하지만 예외가 아래와 같이 나올 때가 있다. 예외 발생: 'OracleInternal.NotificationServices.ONSException'(Oracle.ManagedDataAccess.dll) 왜인지는 모르겠지만 접속 정보에 load balancing=false; ha events=false; 을 추가해주면 문제가 해결된다. var dbInfo = $"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={dbIp})(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={dbName})));load balancing=..

프로그래밍/C# 2022.03.11

[C#] Eager & Short-circuit operators

이번 포트스에선 Eager Operator와 Short-circuit Operator에 대해 알아보도록 하겠다. C#으로 따지자면 &,| 등이 Eager Operator이고 &&, || 가 Short-circuit Operator이다. 물론 다른 언어에서도 다른 방식으로 존재한다. 아래의 코드에서 source.Count > 5 || source.Sum() > 10이라는 조건식이 존재한다. 간단하게 설명하자면 Short-circuit Operator에서는 앞단의 source.Count > 5가 true라면 뒤의 source.Sum() > 10 의 연산을 수행하지 않는다. 만약 Eager Operator 일 경우에는 모든 조건을 다 수행한 후 결과를 가지고 처리하기에 조건식을 사용할때는 Short-circu..

프로그래밍/C# 2022.02.25

[C#] 배열 복사 성능 평가

배열의 값을 복사하는데에는 여러가지 방법이 있다. 일단은 loop를 태워서 직접 copy를 하는 방법이 있고, Array.Copy 또는 Buffer.BlockCopy를 사용하는 방법이 있다. 아래는 성능 평가를 위한 코드를 첨부한다. static int[,] testArray = new int[800, 600]; static void Main(string[] args) { for (int i = 0; i < 800; i++) { for (int j = 0; j < 600; j++) { testArray[i, j] = 0; } } long ms = 0; int count = 10; for (int i = 0; i < count; i++) { ms += BaseCopy(); } Console.WriteLin..

프로그래밍/C# 2022.02.08

[C#] Linq Where Performance Test

근래에 업무를 진행하면서 계산 속도가 이슈가 되는 일이 많았다. 그래서 최적화 할떄 마다 하나씩 정리하고자 한다. C#을 쓰는 유저들은 잘 아는것처럼 LINQ는 사용하기 너무 편하지만 성능은 메뉴얼 구현보다 느리다는것은 잘 알려진 펙트이다. 이점을 해보고자 한다. LINQ에서 자주 쓰는 Where 구문에 대해 테스트를 하기 위해 아래와 같은 코드를 작성하였다. static void Main(string[] args) { List source = new List { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Restart(); for (int i = 0; i < ..

프로그래밍/C# 2022.01.26
반응형