c#

  • c# 문자열 “”와 string.Empty의 성능 차이

    문자열 “”과 string.Empty는 널이 아니고 아무 문자도 담겨 있지 않은 상태로 서로 같다. 그러나 처리 과정은 다르다. “”은 객체가 만들어진다. 그렇다면 그 과정 때문에 처리가 더 늦을까? 두 개의 방법으로 성능을 비교해 봤지만 특별한 차이가 없거나 오히려 “”가 더 빨랐다. 변수 값 쓰기 아래의 예제는 문자열 변수에 “”와 string.Empty를 각각 쓰는 거다. 워밍-업 결과를 뺀…

  • c# 애플리캐이션 설정을 파일로 쓰고 읽기

    애플리캐이션을 이용하다 보면 여러 설정 값들을 관리해야 할 때가 있다. 이런 설정 값들을 저장하고 불러오기 위해 따로 파일을 제어할 필요가 없도록 .네트는 애플리캐이션 설정 기능을 마련해 두고 있다. 읽을 땐 이렇게 한다. Scope를 User로 하면 런타임으로 저장할 수도 있다. 파일은 애플리캐이션 폴더가 아닌 윈도우즈 사용자 폴더 안의 숨겨진 폴더인 AppData에 저장된다. 설정 값들이 수십 개 정도로 많다면 DataTable에 저장한 뒤 직접 파일로 입출력을 하는 게 더 편할…

  • c# DataGridView 글꼴 제어하기

    DataGridViewCell.Style을 설정하여 글꼴의 색, 포매트, 모양 등을 바꿀 수 있다. 일단 셀을 특정하여 스타일을 적용하면 적용된 셀이 이동해도 스타일은 유지된다. 데이터 쏘스에 바인드를 한 경우에도 마찬가지다. 예를 들어 DataTable 가운데에 행을 삽입해도 밀려 내려가는 행들은 기존의 스타일들을 유지한 채로 이동한다. DataGridViewRowCollection.Insert(0, 1)이라고 하면 0번 행에 행 하나를 삽입한다. 두 번째 정수는 삽입할 행의 수를 뜻하기…

  • c# DataTable에 행 추가하기 – DataRowCollection.Add

    행을 추가하기 위해 DataRowCollection.Add를 실행할 때 레퍼런스에는 반드시 DataRow나 object 배열을 패러미터로 받아야 한다고 나와 있지만 그렇지 않다. 아래와 같이 아규먼트를 입력하지 않거나 배열 아닌 하나의 값을 입력해도 된다. 아규먼트로 정수를 입력할 때 DataGridViewRowCollection.Add와는 다르게 작동하므로 주의하는 게 좋다. DataGridViewRowCollection.Add에 정수를 입력하면 그 수만큼의 빈 행들이 만들어진다.

  • c# System.Timers.Timer로 비주얼 컨트롤 제어하기

    멀티뜨레드로 인한 크로스-뜨레드 예외 발생 메인 뜨레드로부터 분리된 뜨레드에서 비주얼 컨트롤을 제어하려 하면 원칙적으로 크로스-뜨레드 오류가 발생한다. 이러한 오류는 디버그 빌드에서는 예외로 처리되지만 릴리스 빌드에서는 그냥 오류가 생긴 대로 출력하고 넘어간다. 릴리스 모드에서 예외로 처리가 되지 않는다고 괜찮은 게 아니라 오류를 무시하는 것이므로 엉뚱한 결과가 나타날 수 있다. 따라서 디버그 빌드에서 분명하게 조치를 취해야 한다….

  • [c#] 멀티뜨레드 동기와 비동기

    동기는 하나의 뜨레드에서 순차적으로 처리되는 걸 말하고 비동기는 여러 뜨레드들에서 동시에 처리되는 걸 뜻한다. 동기를 synchronous라 하고 비동기는 부정 접두사 ‘a~’를 붙여서 asynchronous라 한다. 각각 줄여서 sync와 async라고도 하며 async는 ‘에이씽크’라고 읽는다. ‘아씽크’라고 읽는 거 아니다. synchronous를 네이버 영어사전에서 찾아보면 제일 먼저 ‘동시 발생하는’이라는 뜻이 나온다. 여기에서 혼란이 시작된다. 프로그래밍에서 이해하는 것은 사전적 의미와 완전 반대다….

  • c# is 연산자로 비주얼 컨트롤 검색하기

    아래 예제는 폼에 있는 비주얼 컨트롤들 가운데 TextBox들만 처리하는 거다. is는 형 변환을 할 수 있는지 확인하는 연산자다. Controls는 Control의 컬렉션이다. 즉 Control을 TextBox로 타입캐스트할 수 있느냐를 묻는 거다. 아래의 코드는 오류로 처리된다. Controls에 담겨 있는 건 인스턴스이고 TextBox는 클래스 자체이기 때문이다. 이렇게는 가능하다.

  • c# String 잔기술들 1

    String과 string의 차이 String은 클래스이고 string은 변수형이다. 그러나 아래 예제를 보면 이들 사이에 차이가 없다는 걸 알 수 있다. string은 변수형인데 new로 만들 수 있고 String은 클래스인데 new 없이 그냥 쓸 수 있다. 이들은 이렇게 변수형과 클래스 모두의 기능을 한다. 더 정확하게는 string이 String의 껍데기다. string is an alias for System.String in .NET.– Built-in reference…

  • c# ComboBox 잔기술들

    dictionary 바인드하기 딕셔너리 자체를 바인드하는 게 아니라 키나, 밸류의 필드를 해야 하는 거에 유의한다. wpf DataColumn 바인드하기 wpf의 콤보박스는 ComboBox.DisplayMember가 아니고 ComboBox.DisplayMemberPath를 이용한다.