[C#] MVVM 의 문제점
·
Programming/C#
우선 MVVM 의 설계 철학은 정말 마음에 든다. MVVM 을 완벽하게 구현한다면 이론상 Designer 와 Developer 의 작업을 완벽하게 분리할 수 있으며(물론 Github, StackOverFlow 등에서는 사실상 이것이 불가능하다는 의견도 있다.), View 와 종속적이지 않게 비지니스 로직을 검증할 수 있다. 결론적으로 '유지보수성' 이 매우 높아지는 효과를 가져온다.고전적인 Code-Behind 방식 (일반적으로 Winform, WPF 를 통해 코드를 작동시킬 때 View 영역에 `Button_Click()` 메소드를 생성하는 방식)이 비록 생산성은 MVVM 방식보다 월등히 높지만, 유지보수성에서는 MVVM 우위에 있다. 때문에 장기적으로 관리되어야 할 프로젝트라면 MVVM이 권장된다.이..
[C#] Task, 비동기에 대해
·
Programming/C#
[C#] Task .Wait() vs await 차이점 Task.Wait과 await의 차이점 Stack Overflow에서 발견한 흥미로운 질문과 답변입니다. set 출처: https://stackoverflow.com/questions/9519414/whats-the-difference-between-task-start-wait-and-async-await kayuse88.github.io C# await - C# 프 cypsw.tistory.com 이전 포스팅의 예제와, 결론 자체는 틀리지 않았으나 몇몇 오해할만한 소지가 있다고 판단하여 보완 포스팅을 작성한다. 1. Async is not include Thread 'Async' 는 'Thread' 를 포함하는 개념이 아니다. 오해할 만한 소지가 ..
MAUI의 미래에 대해
·
Programming/C#
요즘 내 흥미를 돋구는것중 하나는 이전 포스팅에서 언급했던 MAUI 라는 놈인데 C#을 토대로 크로스 플랫폼(IOS, Android, Windows) 빌드용으로 만들어진 다중 플랫폼 UI 프레임워크 이다. 이놈의 특징은 하나의 코드를 사용해 모든 플랫폼에서 실행할 수 있다 인데... C#을 사용하던 분들은 어리둥절 할 것이다. 해당 프레임워크를 사용한다고 해서 Windows Lagacy 코드가 Android, IOS 위에서 돌아갈리가 없기 때문이다. 아무리 MS 개발자들의 능력이 좋다고 하지만 이건 힘들것이라는것이 내 지론이고, 역시 내 생각은 맞았다. Window 기준 C#을 사용하여 특정 File 을 선택하는 창을 보여줄 때, 우리는 OpenFileDialog(System.Windows.Forms) ..
[C#] Forms.Timer vs Threading.Timer
·
Programming/C#
우선 Timer 관련 글들을 살펴보면 [ C# ] 세가지 Timer 와 그 차이점 [출처] [C#] 세가지 Timer 와 그 차이점|작성자 코드클럽 blog.naver.com/jjk003/221926047276 특정 작업을 주기적으로 실행하기 위해 흔히 Timer 객체를 사용합니다 정해진 시간 간격으로 변수를 업데이 minineko.tistory.com Forms.Timer 가 Winform 에 '최적화 되었다' 라는 구문이 눈에 띄는데. 이걸 보고 알아서 잘 관리해 주겟거니... 하다가는 함정에 빠지게 된다. 1. Forms.Timer Why there are 5 Versions of Timer Classes in .NET? Why are there five timer classes in the .Ne..
[C#] SharedMemory 사용법
·
Programming/C#
실제 업무에서는 Struct 내부에 데이터를 넣어 SharedMemory 를 통해 프로세스간 데이터를 공유한다. Install class SharedMemory { public void installSharedMemory(string name) { A a; MemoryMappedFile mmf = MemoryMappedFile.CreateNew(name, 10000); var accessor = mmf.CreateViewAccessor(); a.a = 244; a.b = 255; a.c = 266; accessor.Write(0, ref a); } } struct A { public int a; public int b; public int c; } Read class SharedMemory { publi..
[C#] UDP Multicast 수신
·
Programming/C#
멀티캐스트 송수신 - C# 프로그래밍 배우기 (Learn C# Programming) 멀티캐스트 송수신 Broadcast와 Multicast 하나의 컴퓨터에서 또 다른 하나의 컴퓨터에 데이타를 보내는 것을 Unicast라 하고, 하나의 컴퓨터에서 네트워크 상의 모든 컴퓨터에 데이타를 보내는 것을 Br www.csharpstudy.com 기본적으로 위 예제 코드는 잘 동작하지만, Receive 코드가 작동되지 않았다. MulticastOption 클래스 (System.Net.Sockets) 멀티캐스트 그룹을 추가하거나 삭제하는 데 사용되는 IPAddress 값이 들어 있습니다. docs.microsoft.com MSDN의 코드를 참조 해 Socket 기반, MulticastOption 을 적용 해 보니 아..
[C#]System.Timers.Timer 사용시 Race Condition
·
Programming/C#
How should the clean-up of Timers declared inside the scope of a function be managed? In the following code, a Timer is declared inside a function, where it also subscribes to the Elapsed event: void StartTimer() { System.Timers.Timer timer = new System.Timers.Timer... stackoverflow.com 위 StackOverFlow 글에서 핵심적인 내용은 Do beware the very nasty threading race bug that's hidden under the floor mat, th..
[C#] 반복문 캐싱 최적화
·
Programming/C#
이전에 봤던 책에서 C++ 의 최적화가 얼마나 중요한지 짚고 넘어갔었다. 한빛미디어 Optimized C++, C++ 최적화 후기 이 책은 크게 '깊게' 들어가는 경향은 없지만 막 초급자를 탈피하여 중급자로 진입한 C++ 프로그래머 에게는 유용한 책이 될 것이다. 이 책을 읽고 나면 C++ 의 '미묘함' 을 다시한번 확인할 수 있 cypsw.tistory.com 최근 다중 Thread 내의 여러가지 for 문이 동시에 돌아가는 구문이 있었는데 바꾼 코드가 조금 지연이 발생하여 원인을 찾던 중, C# 에서도 캐싱이 적용되는지 확인하기 위해 간단하게 테스트 해 보았다. using System; using System.Collections.Generic; using System.Diagnostics; name..
[C#] Task .Wait() vs await 차이점
·
Programming/C#
Task.Wait과 await의 차이점 Stack Overflow에서 발견한 흥미로운 질문과 답변입니다. set 출처: https://stackoverflow.com/questions/9519414/whats-the-difference-between-task-start-wait-and-async-await kayuse88.github.io C# await - C# 프로그래밍 배우기 (Learn C# Programming) C# 5.0 : async / await 키워드 C# 5.0부터 새로운 C# 키워드로 async와 await가 추가되었다. 이 키워드들은 기존의 비동기 프로그래밍 (asynchronous programming)을 보다 손쉽게 지원하기 위해 C# 5.0에 추가된 중요 www.csharps..
[C#] StructLayoutAttribute.Pack 필드 설명
·
Programming/C#
해당 포스팅은 MSDN의 설명을 보다 다듬은 글입니다. 원본을 참조하고 싶으면 MSDN을 참조하세요. StructLayoutAttribute.Pack 필드 (System.Runtime.InteropServices) 메모리에 있는 클래스 또는 구조체의 데이터 필드 맞춤을 제어합니다.Controls the alignment of data fields of a class or structure in memory. docs.microsoft.com 사용할 Code using System; using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Pack = 0)] struct ExampleStruct { public byte b1; p..