C# 37

[C#] ThreadPool 기본 사용.

c# 에서 제공하는 기본 쓰레드 풀 사용해 보기. 1. 테스트를 위한 컨테이너 선언. - Thread에 안전한 ConcurrentDictionary로 선언.2. 컨테이너에 값 삽입. 3. 루프를 돌면서 컨테이너에서 값 하나 꺼네서 제공하는 쓰레드 풀에 삽입.4. 끝나는 시간에 차이를 두기 위해서 테스트용 함수 안에서 랜덤하게 슬립을 걸도록 한다.5. 마지막으로 main 함수 에서 스레드가 종료되기 전에 메인 쓰레드가 종료되는 것을 막기위해서 ReadLine을 선언. 끝.

C# 2014.11.26

[C#] ConcurrentBag 사용법

Thread에 안전한 ConcurrentBag 용법에 대해서 간략하게 적어 본다. 1. ConcurrentBag 을 선언.2. 데이터 삽입.3. 데이터 확인 1. - TryPeek은 내용물을 확인을 하지만, 컨테이너 안의 데이터를 삭제하지는 않는다. 4. 데이터 확인 2. - TryTake은 내용을 확인하고, 컨테이너 안에서 삭제 한다. 결과 확인. 다음과 같이 확인 할 수 있다. ※ 흠... 컨테이너 안의 내용을 확인 할때, 임의의 값을 가져올 수는 없는 것으로 안다. 즉, 들어 있는 값 중에 아무거나 가져온다는 것이다. 추가. 컨테이너 안의 내용물 확인 방법은 다음과 같다.

C# 2014.11.21

[C#] 객체 복사 : 얕은 복사와 깊은 복사 4

앞서 3편에서 딕셔너리에 포함된 객체의 복사에 대해서 예제를 만들어 봤는데, 이를 더 쉽게 하는 방법이 있다. 우선 스택오버플로우 사이트에서 본 방법으로 함수를 사용하는 방법. 이 예제는 CloneDictionaryCloningValues 함수를 통하는 방법으로, 사용 예시는 Clone 함수 내부에 있다. 또 다른 방법은, C#에서 자체적으로 지원해 주는 방법이 있다. 이 방법은 확실히 위의 방법이나, 앞서 3편에서 보여드린 for문을 사용하는 방법 보다는 간단해 보인다. 하지만, 이 방법은 딕셔너리에서만 통하고 Concurrent 컨테이너들에서는 사용할 수 없다. 이 때는 또 따로 만들어야 한다.

C# 2014.11.20

[C#] 객체 복사 : 얕은 복사와 깊은 복사 3

객체 복사의 일반적인 사용 예시를 만들어 보려고 한다. 위의 클래스는 기본적인 데이터 클래스를 의도하는 testB 와 testB를 딕셔너리로 관리하는 testA 클래스를 나타낸다. testA 클래스에서는 앞서 보여준 Clone과 조금 다른 것을 알 수 있다. 본문 예시) 위의 예시는1. 본 클래스에 값을 삽입 2. 복사를 실행.3. 본 클래스의 값을 변경.4. 변경 된 값을 확인. 하는 순으로 진행 되었다. 결과는 다음과 같이 깊은 복사가 이루어 진 것을 확인 할 수 있다.

C# 2014.11.19

[C#] 객체 복사 : 얕은 복사와 깊은 복사 2

깊은 복사(Deep Copy)는 참조변수가 가르키는 힙 영역 객체를 복사하는 것으로 별도의 힙 영역객체를 생성한다. C# 에서 복사는 기본적으로 얕은 복사이기 때문에 깊은 복사는 별도로 구현해야 한다. 객체 복사 예시. 위의 예제는 앞서 설명한 복사를 예시로 만든 것이다. 여기서 확인 할 수 있듯이 복사 후에 원본의 값을 바꾸면 복사 대상의 값도 변경 됨을 확인 할 수 있다. 해서 다음과 같은 과정으로 깊은 복사를 해야 독립적으로 사용할 수 있다. 깊은 복사 예시 클래스. ICloneable을 상속 받으면 인터페이스로 Clone을 제공한다. 물론 상속 받지 않고 그냥 별도로 만들어도 상관없다. 해서, Clone 함수에서 내부 값을 새로이 생성한 객체에 적용하고 리턴하도록 Clone 함수를 채워준다. 깊은..

C# 2014.11.18

[C#] 객체 복사 : 얕은 복사와 깊은 복사 1

얕은 복사(Shallow Copy)는 객체가 복사될 때, 시리제 객체가 아닌 스택에 있는 참조를 복사하는 것. 복사 예시 위의 예시에서 보듯이 test 클래스를 생성하여 값 1,2를 넣고, t2 클래스를 생성 객체를 복사한 결과에 대한 출력이다. 허나, 이에 대하여 주의 할 점은 원본 객체와 사본 객체가 같은 참조를 바라보기 때문에 사본 객체나 원본 객체의값을 변경하게 되면 얕은 복사된 모든 객체도 영향을 받는다. 그 예제는 다음과 같다. t.a 의 값을 변경한 결과가 t2에서도 영향을 주는 것을 위의 예제에서도 확인 할 수 있다.

C# 2014.11.17

[C#] 정렬 3 (Linq)

이번 내용은 기존의 딕셔너리를 사용하여 정렬을 하던 것과는 좀 다른 내용이다. 내용은 다음과 같다. 그림에서 보듯이 Linq를 약간 사용하여 정렬을 하였다. 1. 딕셔너리를 선언 및 값 삽입.2. desc 정렬 및 출력3. asc 정렬 및 출력. linq의 구문은 from test in test_dic -> test_dic의 내용을 test 에 값을 대입. orderby test.Value 정렬방식 -> 딕셔너리의 value를 기준으로 정렬. select test -> 가져오기. 해서, 위의 코드를 실행하면 다음과 같다. 이 처럼 정렬 됨을 확인 할 수 있다.

C# 2014.03.11