반응형

분류 전체보기 134

[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

[WPF] Combobox AutoComplete 기능 구현

WPF에서 AutoComplete 기능을 사용하는 방법에 대해 알아본다. 위의 그림처럼 Combobox에 텍스트를 입력하면 필터링처리 된 결과만 보여주게 된다. private List _sourceItemList; private List _itemList; public List ItemList { get { return _itemList; } set { SetProperty(ref _itemList, value); } } private bool _comboBoxDropDown; public bool ComboBoxDropDown { get { return _comboBoxDropDown; } set { SetProperty(ref _comboBoxDropDown, value); } } private st..

프로그래밍/WPF 2022.03.30

[WPF] Storyboard 이용하여 Visibility 제어

Open Button과 Close Button이 각자 누를 때마다 서로 반전되어 화면에 보이는 상황이 있다고 하자. 만약 MVVM 패턴에서 이를 제어하려고 한다면 Command를 Binding 하여 특정 변수를 Visivility에 바인딩하여 제어해야 할 것이다. 심지어 Converter를 작성해야한다. 굳이 그럴 필요 없이 Storyboard와 Event Trigger를 이용하여 이를 아래와 같이 제어 할 수 있다. Event Trigger를 등록할 버튼에 이름을 지정해준다. Event Trigger에 등록한 버튼 이름과 트리거에 물릴 이벤트를 연결한다. 트리거가 발생될 때 사용될 Storyboard를 작성한다.

프로그래밍/WPF 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

[C#] List에 추가된 구조체의 값

많은 사람들이 아는 것과 같이 Struct는 Value Type이고 Class는 Reference Type하여 대입할 때 복사되는 방법이 다르다. 이 글에서 Value Type과 Reference Type을 설명하기엔 내가 너무 귀찮고 잘 정리하신 어떤분의 블로그를 첨부한다. https://mathmakeworld.tistory.com/79 C# Value Type과 Reference Type C#을 공부하다 보면 Value Type(값 형식)과 Reference Type(참조 형식)이라는 것을 듣게 됩니다. 이런 것들을 모르고 코딩해도 대체로 원하는 결과를 얻을 수 있습니다. 하지만 가끔가다 코드가 이해하기 mathmakeworld.tistory.com 자. 이제 본론으로 들어간다. public str..

프로그래밍/C# 2022.01.25

[C#] Newtonsoft Json 상속 대상까지 Serialize하기

다음과 같은 구조가 있다고 해보자. public class Box { public double Length { get; set; } public double Width { get; set; } public double Height { get; set; } } public class Carton : Box { public int Index { get; set; } } Carton은 Box를 상속 받는다. 이러한 객체의 값을 Serialize하게 되면 아래와 같은 형태로 나온다. { "Index": 1, "Length": 800.0, "Width": 600.0, "Height": 1400.0 } 위의 Json 정보만으로는 이것이 Carton인지 다른 어떤 객체인지 확인이 불가능하다. var settings ..

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