'RTFM/C#'에 해당되는 글 6건

  1. 2009.12.07 LINQ to SQL Tips and Tricks
  2. 2009.03.26 LINQ 심층 분석 : 쿼리 연산자의 입력과 출력
  3. 2009.03.25 C# CAPTCHA(자동가입방지용 이미지) 라이브러리
  4. 2009.03.25 문자열을 64비트 정수로 변환하는 메서드
  5. 2009.03.09 .NET Event Cache 소개
  6. 2009.03.04 ForEach 연산자의 누락

LINQ to SQL Tips and Tricks

RTFM/C# 2009. 12. 7. 11:34

http://www.codeproject.com/KB/linq/LINQToSQLTips.aspx

Linq to SQL에 대한 몇 가지 팁 모음.

System.Data.Linq.SqlClient.SqlMethods 라는 클래스가 있다는 걸 처음 알았습니다.

 

참고로 damieng의 팁과 트릭도 덧붙입니다.

http://damieng.com/blog/2009/03/16/linq-to-sql-tips-and-tricks-1

http://damieng.com/blog/2009/04/12/linq-to-sql-tips-and-tricks-2

:

LINQ 심층 분석 : 쿼리 연산자의 입력과 출력

RTFM/C# 2009. 3. 26. 13:47

http://aspnet.4guysfromrolla.com/articles/032509-1.aspx

 

LINQ의 표준 쿼리 연산자에 대해 깊이 있게 파헤쳐 봅니다.

마지막의 두 단원 (Chaining Query Operators / Query Operators and Deffered Execution)이 특히 유용한데, 예를 들어

// C# - Create an instance of the Fibonacci class to hold the first 7 numbers
Fibonacci fib = new Fibonacci(7);
// Compute the sum of those elements in fib whose preceding elements' sum is greater than or equal to 6
int oddSum = fib.SkipUntilSummationSurpassed(6).Where(x => x % 2 == 1).Summation();

에서, 세 개의 쿼리 연산자의 실행 순서와 그 내부 동작을 설명한 부분과,

욕심쟁이 쿼리 연산자(greedy query operator)와 게으른 쿼리 연산자(lazy query operator)에 대한 설명은 꼭 한번 읽어보실 것을 추천합니다.

:

C# CAPTCHA(자동가입방지용 이미지) 라이브러리

RTFM/C# 2009. 3. 25. 18:02

http://www.codeproject.com/KB/library/captchaimage.aspx

 

C# CAPTCHA 라이브러리를 소개합니다.

SixPack 이라는 라이브러리에 포함된 CaptchImage 클래스를 사용하면 아래와 같은 자동가입방지용 이미지를 쉽게 만들 수 있습니다.

foobar

:

문자열을 64비트 정수로 변환하는 메서드

RTFM/C# 2009. 3. 25. 17:52

http://www.codeproject.com/KB/library/String_To_64bit_Int.aspx

 

닷넷 프레임웍에는 GetHashCode라는 메서드가 있어 문자열을 32비트 정수로 변환할 수 있습니다.

하지만 이렇게 변환된 정수는 유니크한 값이라는 보장을 하지 못합니다.

이에 대한 대안으로 이 아티클에서는 문자열을 64비트 정수로 변환하는 방법을 설명합니다.

물론 64비트 정수라고 해서 유니크함을 보장하지는 않지만, 중복될 확률은 아주 희박해집니다.

아티클 저자의 실험에 의하면, 천만 번을 수행하였을 때, GetHashCode에서는 4,150 개의 중복이 발생한 반면에 GetInt64HashCode에서는 한 개의 중복도 없었다고 합니다.

(아티클의 댓글에 의하면 1억 번을 수행하여도 중복된 값이 없다고 합니다. 또한 참고로 수행에 걸린 시간은 각각 35 ms와 830 ms로 32비트 정수가 월등히 빨랐습니다.)

 

그렇다면 이 메서드가 어떤 경우에 필요할까요?

아티클에도 등장하는 예이지만, 아주 긴 URL을 DB 테이블에 저장하고 이 컬럼에 인덱스를 거는 경우를 생각해봅시다.

두 가지가 문제가 될 수 있습니다.

  1. 인덱스 키의 최대 크기를 초과하는 URL을 저장할 수 없습니다.
  2. 인덱스 키가 커지면 성능이 나빠질 수 밖에 없습니다.

그래서 이에 대한 대안으로 64비트 정수형 컬럼을 추가하고, URL 컬럼이 아닌 이 컬럼에 인덱스를 거는 것입니다.

그렇다면, 특정 URL에 대한 쿼리가 들어오면 이에 대한 64비트 정수값을 얻어서 인덱스 스캔을 할 수가 있을 것입니다.

물론 상황에 따라 취사선택할 문제이긴 하나 진지하게 검토해볼 만한 가치가 있는 기법이라는 생각이 듭니다.

:

.NET Event Cache 소개

RTFM/C# 2009. 3. 9. 14:03

http://www.c-sharpcorner.com/UploadFile/rmcochran/EventCache03072009210419PM/EventCache.aspx


재사용 가능한 범용 이벤트 캐시 컴퍼넌트를 소개합니다.

또한 이벤트 버블링도 지원합니다.


졸고 C# 코딩 연습 - 대리자와 이벤트의 설명처럼 이벤트 관련 코드를 일일이 만드는 대신, 이러한 범용 컴퍼넌트를 사용하는 방법도 괜찮은 것 같습니다.

:

ForEach 연산자의 누락

RTFM/C# 2009. 3. 4. 13:50

http://bartdesmet.net/blogs/bart/archive/2008/02/26/the-missing-operator-foreach.aspx


LINQ to Objects에는 ForEach 연산자가 지원되지 않습니다.

이 포스트에서는 확장메서드를 이용하여 LINQ to Objects에 ForEach 기능을 구현합니다.

: