728x90

언어/C# 62

DebuggerNonUserCodeAttribute, GerneratedCodeAttribute, RepeatedField

DebuggerNonUserCodeAttribute디버거가 코드의 특정 부분을 사용자 코드가 아닌 것으로 처리하도록 지정하는 데 사용된다.이 속성이 적용된 메서드, 속성 또는 클래스는 디버깅 세션에서 자동으로 무시된다.주로 코드 생성 도구가 생성한 코드나 라이브러리 코드를 디버깅할 때 사용자에게 불필요한 디버깅 정보가 노출되는 것을 방지하는 데 사용된다.효과디버깅 세션 중에 이 메서드나 클래스에 대한 스택 추적이 생략된다.예외가 발생하더라도 디버거는 이 코드의 내부로 들어가지 않고 사용자 코드로 이동한다.디버거가 해당 코드의 중단점(breakpoint)을 무시한다.GerneratedCodeAttribute코드가 도구에 의해 생성되었음을 나타내는 속성이다. 이 속성은 코드 분석 도구와 같은 도구가 생성된 ..

언어/C# 2024.08.01

ConcurrentDictionary<TKey, TValue>

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

언어/C# 2024.08.01

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
728x90