본문 바로가기

반응형

C#

(91)
Debounce, Throttle Debounce - 입력주기가 끝나면 마지막 값을 출력한다. - 우가로 Value가 들어오면 주기가 다시 갱신된다. Throttle - 처음 구독 시점에 첫번째 value를 바로 방출한다. - 첫번째값인 경우(latest: false) : 특정 주기 안의 첫번째 Value를 출력한다. - 가장 최근값인 경우(latest: true) : 특정 주기 안의 가장 최근 Value를 출력한다. [출처] 개념 : http://chanhee-jeong.tistory.com/21 코드 - https://gist.github.com/RickStrahl/0519b678f3294e27891f4d4f0608519a - https://medium.com/@coddicat/c-debounce-and-throttle-4c927a4..
STAThread C#은 기본적으로 MTA로 운영되는데, STAThread라고 설정하지 않으면 기본적으로 MTAThread 방식으로 운영된다. STA를 사용하는 경우는 싱글 Thread로만 동작되는 COM 객체를 사용하는 경우인데 드래그 드랍 기능 클립보드 관련 기능 OpenDialog, SaveFileDialog 웹브라우저 컨트롤 등과 같이 시스템 기능을 사용하는 경우 STAThread로 동작 되어야 한다. 또, COM을 직접 사용하는 것이 아니어도 .NET Framework의 일부 기능을 COM일 사용하고 있기 때문에, 그러한 기능을 사용하는 경우에도 반드시 STA로 할 필요가 있다고 한다. [출처] COM 설명 : http://something-is-code.tistory.com/33 STA 사용하는 경우 참고 : ..
Background에서 메소드 실행하는 방법 1. BackgroundWorker Thread 사용하기 2. Thread - IsBackground 속성 사용하기 var thread = new Thread(실행시키려는 메소드); thread.IsBackground = true; // default value는 false thread.Start();
C# Winform 디자이너가 정상적으로 로딩되지 않을 경우, 체크 사항 및 해결 방안 1. 리빌드 한 후, 디자이너를 실행시켜본다. 2. Visual Studio을 재기동한다. 3. 컴포넌트_Load 이벤트 확인 디자인 모드에서도 컴포넌트_Load가 호출되는 듯하다. 따라서, 컴포넌트_Load 이벤트에서 DB접속등의 많은 일을 하는 경우(Control이 Load되는 시점에 DB로부터 Control에 속한 ComboBox나 Grid를 초히과하는 코드들을 넣어야 할 때), 디자인 모드에서 문제 발생 가능하다. 이 경우, 디자인 모드에서 실행되지 말아야 한다면, 컴포넌트_Load 이벤트에 DesignMode인지 확인해주는 작업이 필요하다. // Program.cs [STAThread] private static void Main() { Util.SetIsDesignMode(); // 맨 처음 ..
단일 프로세스 실행 실행파일을 여러 번 실행하면 여러 개의 다른 프로세스들이 생성되는데, 만약 해당 머신에서 오직 한 프로세스만 실행되도록 하길 원한다면, 일반적으로 사용되는 한 방법으로 Mutex를 사용할 수 있다. static class Program { [STAThread] static void Main() { try { using (new Mutex(true, Application.ProductName, out var isNew)) { if (isNew) { try { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FrmMain()); } catch (Exception e..
ref를 사용하는 경우 C# 키워드인 ref는 해당 타입 객체가 호출되는 메소드에서 변경될 수 있다는 것을 의미한다. 1. Value 타입 객체의 값을 변경하려고 할 경우 public void RunTest() { int a = 10; int b = 20; int c = 30; bool success = Sum(a, b, ref c); Console.WriteLine(c); } public bool Sum(int a, int b, ref int sum) { sum += a + b; return true; } 2. Reference 타입 객체를 새로운 레퍼런스 객체로 할당할 경우 - Reference 타입 객체는 Heap 영역의 포인터만 전달하기 때문에 ref를 사용하지 않아도 해당 객체의 property나 객체 내용을 변경할 ..
대용량 리스트를 처리하면서 느낀 점 1. 비동기 작업은 최대한 세분화하자 2. 병렬 처리는 너무 남발하지 말자(선택과 집중,, 정말 필요한 곳에만 쓰자) 3. Linq를 너무 믿지 말자(ToList 형변환.. 안 쓰는 방안 찾느라 너무 힘들었다.) 4. 특별하지 않아보이는 코드가 한 줄이라도 의심하면서 보자(treeList.dataSource = List; 이 한 줄 없애느라 힘들었다)
[DevExpress] GridControl DataSource에 대용량 데이터 세팅할 시, 느린 이슈 해결하는 방법 행이 몇만건 되는 데이터를 GridControl DataSource에 바로 대입해서 세팅하려고 하니 몇초나 걸려서 이를 개선하는 작업을 했다. 몇 줄 안 되는 코드로 바꾸기만 했는데 시간이 빠르게 단축됐다. 아래는 해당 코드이다~.~ treeList.DataSource = new List(); if (!(treeList.DataSource is List dataSource)) return; dataSource.AddRange(넣으려는 리스트); treeList.RefreshDataSource(); 앗 보니까 treeList네 ㅎ 어쨌든 같지 않을까 ㅎ

반응형