GC, Garbage Collection 메모리 관리 기법 중 하나로, 프로그램이 동적으로 할당했던 메모리 영역중에서 필요없게된 영역을 해제하는 기능이다. 장점 GC는 다음과 같은 버그들을 방지 할 수 있다. 유효하지 않은 포인터 접근(이미 해제된 메모리에 접근하는 버그) 이중 해제(이미 해제된 메모리를 다시 해제하는 버그) 메모리 누수(더 이상 필요하지 않은 메모리가 해제되지 않고 남아있는 버그) 단점 어떤 메모리를 해제할 지 결정하는데 비용이 든다 GC가 일어나는 타이밍이나 점유시간을 미리 예측하기 힘들다 할당된 메모리가 해제되는 시점을 알 수 없다. https://velog.io/@devseunggwan/C-Garbage-Collection-GC-%EA%B0%80%EB%B9%84%EC%A7%80-%..
관리되는 코드, 관리되지 않는 코드 C#을 처음 공부할때 나에게 너무 어려운 에러 문구였다. 쉽게 말하면 관리되는 코드 .NET CIL로 작성하고 컴파일 하는 .NET상의 코드 - GC 메모리 관리가 된다. 관리되지 않는 코드 기계 코드를 직접 컴파일 하도록 컴파일되는 .NET에 없는 코드 - GC 메모리 관리가 안된다. ex) 윈도우 시스템 자원 🌳 IntPtr - 인터포인터 관리되지 않는 메모리 블록에 대한 포인터 정수형 포인터를 의미하는 값 형식의 타입 포인터는 메모리 주소값을 보관하는 곳 IntPtr타입은 메모리 주소를 가리키는것 외에 윈도우 OS의 핸들값을 보관하는 용도로 쓰인다. 핸들은 윈도우 OS가 특정 자원에 대한 식별자로서 보관하는 값인데 일례로 파일이 좋은예다. 파일처리, OS에서 제공..
사용 이유 멀티 스레드는 실행 순서가 불규칙하다. 공유 리소스(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 : 스..
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..
object : boxing, unboxing 모든타입이 상속 받아야하는 최상단 타입 그렇기 때문에 모든 타입은 object 타입으로 형 변환이 가능하다. 이때 boxing, unboxing 이라고 한다. dynamic 루비나 파이썬같은 동적 언어도 .NET프레임워크에서 실행할 수 있게 연동하기위해 나왔다. var와 비슷해 보이지만 var는 컴파일 빌드 시점에 초기값과 대응되는 타입으로 치환하지만 dynamic은 해당 프로그램이 실행되는 시점에 타입을 결정한다. var 박싱 값 형식을 참조 형식으로 변환하는 것 ex) int → object 언박싱 참조 형식을 값 형식으로 변환하는 것 ex) object형 → 실제로 사용할 다른 타입으로 변환하는것 중요한 이유 boxing이 되면 참조 형식으로 변환되어 ..