반응형

전체 글 129

[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

[C#] Newtonsoft private set 값 DeserialzeObject 방법

Class나 struct의 Property를 private set으로 설정한 뒤 DeserialzeObject를 수행하게 되면 제대로 값을 가져오지 못한다. 이것은 해당 Property가 Json Property라고 인식을 못해서 생기는 문제이다. 아래와 같은 방법으로 간단히 해결가능하다. public class Box { [JsonProperty] public double Length { get; private set; } [JsonProperty] public double Width { get; private set; } [JsonProperty] public double Height { get; private set; } } 해당 프로퍼티를 Json property라고 설정을 해두면 처리 완료!

프로그래밍/C# 2022.01.18

[WPF] canvas 내용을 비트맵 이미지로 저장

canvas에 있는 내용을 그대로 화면으로 캡쳐하여 비트맵 파일로 저장하는 방법이다. 일단 저장을 원하는 Canvas Control에 x:Name을 지정한다. 여기선 그냥 canvas라고 지정하였다. canvas에 그리기 원하는 내용을 넣는다. 아래의 코드를 실행시킨다. RenderTargetBitmap rtb = new RenderTargetBitmap((int)canvas.ActualWidth, (int)canvas.ActualHeight, 96, 96, PixelFormats.Pbgra32); rtb.Render(canvas); using (Stream stream = new FileStream(System.Environment.CurrentDirectory + @"\background.bmp", ..

프로그래밍/WPF 2021.09.09
반응형