728x90

C# 81

ConcurrentDictionary<TKey, TValue>

ConcurrentDictionary여러 개의 스레드에서 동시에 액세스 할 수 있는 키/값 쌍의 스레드로부터 안전한 컬렉션이다.모든 작업은 원자성이며 클래스의 다른 모든 작업과 관련하여 스레드로부터 안전하다.ConcurrentDictionary 유일한 예외는 대리자, 및 GetOrAdd를 허용하는 메서드이다. AddOrUpdate 사전에 대한 수정 및 쓰기 작업의 경우는 ConcurrentDictionary 세분화된 잠금을 사용하여 스레드 안전을 보장한다.(사전에 대한 읽기 작업은 잠금이 ㅇ벗는 방식으로 수행된다.) 그러나 이러한 메서드에 대한 대리자는 잠금에서 알 수 없는 코드를 실행하여 발생할 수 있는 문제를 방지하기 위해 잠금 외부에서 호출된다. 따라서 이러한 대리자가 실행하는 코드에는 작업의 원자..

언어/C# 2024.08.01

24.07.31 C#

C#Environment.ProcessorCountC#에서 현재 시스템의 논리 프로세서(코어) 수를 반환하는 속성이다.이 속성은 .NET의 System 네임스페이스에 포함되어 있으며, 멀티 스레딩 또는 병렬 작업을 최적화할 때 유용하게 사용할 수 있다.논리 프로세서와 물리 프로세서논리 프로세서하이퍼스레딩 기술과 같은 기술을 통해 운영 체제가 인식하는 프로세서의 수를 나타낸다.물리 프로세서실제로 존재하는 코어의 수를 나타낸다.활용스레드 풀 크기 결정시스템의 논리 프로세서 수를 기반으로 스레드 풀의 크기를 동적으로 결정할 수 있다.병렬 작업 최적화데이터 병렬 처리를 최적화할 때 사용할 스레드의 수를 조정할 수 있다.시스템 정보 제공애플리케이션에서 시스템의 프로세서 개수를 사용자에게 표시하거나 로그에 기록할 ..

Select, Where, OrderBy, List.Find(All)

Select, Where, OrderBy, List.Find(All)Select, Where, OrderBy 메서드들은 IEnumerable 인터페이스에서 제공하고 있다. 이 말은 IEnumerable을 상속하고 있는 모든 클래스에서 사용할 수 있음을 뜻한다.Find는 리스트이다.System.Collections에 있는 데이터 묶음 클래스가 있다. List, ArrayList, Dictionary, Stack, Queue등 거의 모든 Collections에서 사용이 가능하다.Func을 매개변수로 받을 수 있다.함수로 그때 필요한 값을 찾아올 수 있다.where조건을 집어넣어 조건에 맞는 인스턴스 또는 값들을 가져온다.SelectWhere과 달리 조건에 맞는 인스턴스가 아닌 그 값 자체를 가져온다.Find..

언어/C# 2024.07.31

LINQ(Language Integrated Query), AsEnumerable Method

AsEnumerable MethodLINQ 쿼리는 IEnumerable 또는 IQueryable 인터페이스를 구현하는 데이터 원본에서 작동한다. DataTable 클래스는 이 인터페이스를 구현하지 않기 때문에 직접 LINQ 쿼리를 사용할 수 없다.AsEnumerable 메서드를 사용하여 Datatable을 IEnumerable로 변환할 수 있다. 변환된 객체는 원본 DataTable에 바인딩 된다. 따라서 AsEnumerable를 여러 번 호출해도 모두 같은 원본 DataTable에 바인딩된 독립적인 쿼리 가능한 객체를 반환한다.DataTable을 LINQ 쿼리의 원본으로 사용하려면 AsEnumerable 메서드를 사용하여 IEnumerable로 변환해야 한다. 이렇게 변환된 객체는 원본 DataTabl..

언어/C# 2024.07.31

SocketAsyncEventArgs

SocketAsyncEventArgs.NET의 비동기 소켓 프로그래밍에서 사용되는 클래스이다. 이 클래스는 네트워크 소켓 작업을 효율적으로 처리하기 위해 설계되었으며, 특히 높은 성능과 확장성을 요구하는 서버 응용 프로그램에서 유용하다.Socket 통신을 하기 때문에 Socket이고, 비동기로 작업ㅇ르 하기 때문에 Async이다. 작업을 완료하면 실행되는 완료 콜백 함수를 가질 수 있어 Event이고, Socket 클래스의 비동기 함수에 인수로 들어가기 때문에 Args라고 생각하면 된다.Socket 클래스의 함수 중 뒤에 Async가 붙는 함수들은 모두 아래의 형태로 되어 있다.public bool *** Async(SocketAsyncEventArgs e); SocketAsyncEventArgs를 활용..

언어/C# 2024.07.31

as/ is/ this/ base

as/ is/ this/ baseas명시적 형변환에 사용되는 키워드이다.형변환이 가능하면 변환된 인스턴스를 반환하고 그렇지 않으면 null을 반환한다.참조 형식에만 사용 가능하다.형변환이 실패했을 때, ()을 사용한 명시적 형변환의 경우 런타임 에러가 발생하지만 as 연산자를 사용할 경우 에러가 발생하지 않고 null을 반환한다.is형변환의 가능성 여부를 bool값으로 반환한다.값 형식, 참조 형식 모두 사용 가능하다.C# 7.0부터 is 연산자를 as 연산자처럼 사용할 수 있게 됐다.this클래스 내부에서 인스턴스 자신을 가리키는 키워드이다.base부모 클래스 인스턴스를 가리키는 키워드이다.this와 가리키는 대상이 다를 뿐 사용 패턴은 유사하다.

언어/C# 2024.07.31

Interlocked

Interlocked다중(멀티) 스레드에서 공유하는 변수에 대한 원자 단위 연산을 제공하는 클래스이다.Interlocked.Increment(ref number);Increment는 원자성이 보장된 number에 +1을 하는 함수이다.number의 값을 인자로 넣는게 아니라 참조 값을 넘긴다.문제점원자성을 보장하기 위해 하드웨어 레벨에서 작동하므로 다른 일반 연산보다 더 많은 오버헤드가 발생한다.여러 스레드가 동일한 자원에 동시에 액세스 하려고 할 때 경합이 발생할 수 있다. 이런 경합 문제는 스레드들이 자원을 기다리며 시간을 낭비하게 만들고 전체 프로그램의 성능을 저하시킨다.경합과 경쟁에 대해서 착각을 했다.경합(Contention)의 경우 여러 스레드가 동일한 자원에 동시에 접근하려고 할 때 발생하는..

언어/C# 2024.07.31

ArraySegment

ArraySegment배열(Array)의 특정 데이터를 참조할 수 있게 해주는 래퍼(Wrapper)이다.1차원 배열의 래퍼로 배열 내의 요소를 길이(범위)를 지정하여 구분한다.구분되어 있는 배열의 범위를 참조하기 때문에 사용할 때 새로운 배열을 만들지 않는다.배열의 일부만 나타내는 개체를 상대적으로 비용이 많이 드는 메서드 Copy를 호출하는 대신 메서드에 인수로 전달 ArraySegment 하여 배열의 일부 복사본을 전달할 수 있다.다중 스레드 앱에서 구조를 사용하여 각 스레드가 ArraySegment 배열의 일부에서만 작동하도록 할 수 있다.ArraySegment는 불변(immutable) 구조체(struct)이기 때문에 내용을 변경할 수 없다.원본 배열을 보호하면서 배열의 일부를 참조하고자 할 때 ..

언어/C# 2024.07.31

Invoke & BeginInvoke

Invoke & BeginInvokeInvokeControl.Invoke컨트롤의 내부 핸들이 있는 스레드에서 지정된 대리자를 실행하는 방법이다.UI 컨트롤 스레드에서 실행되지만 호출 스레드가 실행되기 앞서 기존 스레드 완료를 기다리고 호출된다.Delegate.Invoke동일한 스레드에서 사용할 대리자를 동기적으로 실행하는 방법이다.컨트롤의 본인 스레드가 아닌 다른 스레드를 이용하여 해당 컨트롤 객체를 동기식으로 실행하는 방법이다.BeginInvokeControl.BeginInvoke컨트롤의 기본 핸들이 만들어진 스레드에서 대리자를 비동기적으로 실행하는 방법이다.Delegate.BeginInvoke컨트롤의 내부 핸들이 만들어진 스레드에서 지정된 인수를 사용하여 지정된 대리자를 비동기적으로 실행하는 방법이다..

언어/C# 2024.07.31

ConcurrentQueue<T>

ConcurrentQueue.NET의 ‘System.Collections.Concurrent’ 네임스페이스에 속한 스레드 안전한 큐이다.여러 스레드가 동시에 안전하게 요소를 추가하고 제거할 수 있도록 설계되었다. 이는 멀티스레딩 환경에서 데이터 구조를 안전하게 사용할 수 있게 해준다.주요 특징스레드 안정성(Thread-Safety)스레드 안전하게 설계되어 여러 스레드가 동시에 큐에 접근하여 요소를 추가하거나 제거할 수 있다.FIFO(First-In-First-Out)선입선출 방식으로 작동한다.비차단(Non-Blocking)대부분의 작업에서 잠금(lock)을 사용하지 않으며, 따라서 성능이 매우 좋다.주요 메서드Enqueue(T item)큐의 끝에 요소를 추가한다.TryDequeue(out T result..

언어/C# 2024.07.31
728x90