재밌는걸 봐서 올려본다


http://stackoverflow.com/questions/541954/how-would-you-count-occurrences-of-a-string-within-a-string?rq=1


문자열 내에서 특정 문자를 찾는 방식인데 질문자가 올린 방식이 참 독특하게 느껴졌다.

그리고 그 방식이 오히려 이전에 떠돌던 방식보다 더 빠르다니... (베스트 답변 참고)


그러나 가장 빠른 방식은 문자 하나하나를 일일히 비교하는 것이라는 결과를 보니

역시 단순한게 짱이구나 싶기도 하다

'Programming > C#' 카테고리의 다른 글

C# GC 빈도 낮추기  (0) 2013.12.20
c# - c dll 디버깅시 주의할 점  (0) 2013.12.20
C# 타이머 사용 예제  (0) 2013.12.10
C#에서 User Control 만들기  (0) 2013.11.12
c#에서 SQLite 한글 사용하기 -2-  (0) 2013.11.05
Posted by Vermond
:

Visual Studio 2010에서 작성되었다

TimerSample.7z


위 프로젝트가 열리지 않을 경우 이 파일만 참고해도 무방하다

Form1.cs



C#에서 Timer는 3가지 종류가 있다


System.Windows.Forms.Timer

System.Threading.Timer

System.Timers.Timer


이 예제에서는 각각의 타이머에 대한 간략한 예제가 작성되어 있다

예제는 아주 간단해서 코드보다 주석이 더 길다


첫번째와 세번째 타이머는 비슷하고 두번째는 동작방식이 약간 다르다


각 타이머에 대한 차이 혹은 설명은 아래를 참고하도록 한다

http://msdn.microsoft.com/en-us/magazine/cc164015.aspx (영어)

http://blog.daum.net/starkcb/117



간략하게 사용 용도를 설명한다면

첫번째 타이머는 간략하게 수행할 작업에 적합하며, 별다른 조취 없이 UI 쓰레드에 접근할 수 있기 때문에 편리하다.

그러나 많이 계산해야 되는 경우라면 사용하지 않는 편이 좋은데, 오랜 시간 동작한다면 그동안 UI가 먹통이 된다

(자세한 내용은 위 링크를 참고하도록 한다)


두번째 타이머는 UI 쓰레드와 다른 쓰레드에서 동작하기 때문에 UI가 먹통이 된다거나 하지는 않는다

그렇다면 단순히 쓰레드를 사용해도 되지 않느냐고 물을 수 있지만, 반복 작업에는 쓰레드 내부에 코드로 작성하는 것보다 이쪽이 훨씬 편리하다.

만약 반복 작업이 특정한 시간마다 이루어져야 된다면 이 타이머를 사용하는게 훨씬 간편하면서도 확실하다


세번째 타이머는 첫번째와 비슷하지만 시간 정확도가 훨씬 높다.

보다 정확하게 실행되어야 한다면 이 타이머를 사용하는 것이 좋다

이 타이머는 UI 쓰레드에서 실행될수도 있고 다른 쓰레드로 실행될 수도 있기 때문에 코드 안전성을 위한다면 UI 접근 코드는 invoke-delegate를 사용해주는 편이 좋다

Posted by Vermond
:

사용자가 직접 만들어서 사용할 수 있는 구성요소 중에서 UserControl은 Component에 비해서 작성하기가 쉽다.


 개인적으로 UserControl은 여러 메뉴가 복합적으로 사용되어야 할 때에 사용하면 편하다. 가령 이미지 밑에 텍스트가 따로 출력되는 버튼 아이템은 기본으로 제공되지 않기 때문에 UserControl로 만들어 사용하면 간편하다.


[추가]

프로젝트 오른쪽 클릭 - 추가 - 사용자 정의 컨트롤

(다른 방법도 있다)


이름을 입력하고 확인을 누른다


[배치]

일반적인 디자인 편집화면의 배치와 동일하다. 원하는 아이템을 추가하고 적절하게 배치하도록 한다.


크기 설정에는 조금 신경을 써줘야 한다. 기본적인 크기는 고정 크기이기 때문에 아이템을 추가해서 크기를 늘려도 내부 아이템 크기는 변하지 않는다. Dock 옵션 혹은 코드상에서 크기 수정을 하거나 해서 크기가 변하도록 하는 것이 한 방법이다.


[속성값 설정]

내부의 아이템에 직접 접근할 수 있도록 해야 한다. 그렇지 않으면 계속 고정된 값만 사용해야 한다. 버튼을 만들어놓고 텍스트 수정을 할 수 있는 방법을 마련하지 않으면 같은 텍스트만 사용해야 한다.


코드 내부에 다음의 코드를 추가한다

[Description("설명"), Category("분류")]

        public string myText

        {

            get { return label1.Text; }

            set { label1.Text = value; }

        }


설명과 분류는 GUI 편집 화면에서 보조로 사용하기 위한 것이다.

설정하지 않은 경우에 기타 분류로 취급된다. 그러나 편의를 위해서 간략한 설명을 추가하도록 하자.


데이터 입출력 부분은 get/set을 사용하면 간편하다. 필요에 따라서 추가 기능을 넣어야 될 경우도 있으나 여기서는 생략한다.


[사용]

프로젝트 내부에서 직접 사용하는 방법에 대해서만 설명한다.

사용하기 위해서는 먼저 빌드를 할 필요가 있다.

빌드가 끝나면 GUI 편집창의 도구 상자 최상단에 방금 작성한 아이템이 추가된다.

이후 일반 Components 같이 끌어다 사용하면 된다.

Posted by Vermond
: