C#/C#정리

    [C#] GC, 가비지 컬렉터, 메모리 관리, using

    GC, Garbage Collection 메모리 관리 기법 중 하나로, 프로그램이 동적으로 할당했던 메모리 영역중에서 필요없게된 영역을 해제하는 기능이다. 장점 GC는 다음과 같은 버그들을 방지 할 수 있다. 유효하지 않은 포인터 접근(이미 해제된 메모리에 접근하는 버그) 이중 해제(이미 해제된 메모리를 다시 해제하는 버그) 메모리 누수(더 이상 필요하지 않은 메모리가 해제되지 않고 남아있는 버그) 단점 어떤 메모리를 해제할 지 결정하는데 비용이 든다 GC가 일어나는 타이밍이나 점유시간을 미리 예측하기 힘들다 할당된 메모리가 해제되는 시점을 알 수 없다. https://velog.io/@devseunggwan/C-Garbage-Collection-GC-%EA%B0%80%EB%B9%84%EC%A7%80-%..

    [C#] 관리되는, 관리되지 않는 코드

    관리되는 코드, 관리되지 않는 코드 C#을 처음 공부할때 나에게 너무 어려운 에러 문구였다. 쉽게 말하면 관리되는 코드 .NET CIL로 작성하고 컴파일 하는 .NET상의 코드 - GC 메모리 관리가 된다. 관리되지 않는 코드 기계 코드를 직접 컴파일 하도록 컴파일되는 .NET에 없는 코드 - GC 메모리 관리가 안된다. ex) 윈도우 시스템 자원 🌳 IntPtr - 인터포인터 관리되지 않는 메모리 블록에 대한 포인터 정수형 포인터를 의미하는 값 형식의 타입 포인터는 메모리 주소값을 보관하는 곳 IntPtr타입은 메모리 주소를 가리키는것 외에 윈도우 OS의 핸들값을 보관하는 용도로 쓰인다. 핸들은 윈도우 OS가 특정 자원에 대한 식별자로서 보관하는 값인데 일례로 파일이 좋은예다. 파일처리, OS에서 제공..

    [C#] Thread 쓰레드 동기화

    사용 이유 멀티 스레드는 실행 순서가 불규칙하다. 공유 리소스(shared resource)에 대한 스레드의 동기화(synchronization)처리가 되지않았다. Monitor : 모니터 Enter와 Exit 코드 사이에 위치한 모든 코드는 한 순간에 스레드 하나만 진입해서 실행할 수 있다. 또한 Enter와 Exit 메서드의 인자로 전달하는 값은 반드시 참조형 타입의 인스턴스여야 한다. private static object lockObj = new object(); Monitor.Enter(lockObj); try { ~~~ } finally { Monitor.Exit(lockObj); } * Wait(lockObj) / Pulse(lockObj) / PulseAll(lockObj) Lock : 스..

    [C#] Thread 쓰레드

    Thread 스레드는 명령어를 실행하기 위한 스케줄링 단위 프로세스 내부에서 생성할 수 있다. OS에서 멀티 스레딩을 지원한다면 하나의 프로세스가 여러 개의 스레드 자원을 가질 수 있다. 프로세스가 생성될 때 기본적으로 한 개의 스레드를 함께 생성하며 이를 main thread, primary thread라고 부른다. Thread 상태 알아보기 Thread thread = Thread.CurrentThread; Console.WriteLine(thread.ThreadState); // 출력결과 Running Thread 생성 Thread 생성은 Trigger 쪽에 두지 않고 초기화 쪽에 두는것이 일반적이다. using System.Threading; Thread Mythread Mythread = new..

    [C#] 다양한 타입(object, dynamic, var)

    object : boxing, unboxing 모든타입이 상속 받아야하는 최상단 타입 그렇기 때문에 모든 타입은 object 타입으로 형 변환이 가능하다. 이때 boxing, unboxing 이라고 한다. dynamic 루비나 파이썬같은 동적 언어도 .NET프레임워크에서 실행할 수 있게 연동하기위해 나왔다. var와 비슷해 보이지만 var는 컴파일 빌드 시점에 초기값과 대응되는 타입으로 치환하지만 dynamic은 해당 프로그램이 실행되는 시점에 타입을 결정한다. var 박싱 값 형식을 참조 형식으로 변환하는 것 ex) int → object 언박싱 참조 형식을 값 형식으로 변환하는 것 ex) object형 → 실제로 사용할 다른 타입으로 변환하는것 중요한 이유 boxing이 되면 참조 형식으로 변환되어 ..