방프리
20.04.22 Chapter2. .Net 리소스 관리 (Item 11) 본문
Item 11: .NET 리소스 관리에 대한 이해
프로그래밍을 공부하면서 제일 이해하기 힘들고, 제일 찾기 힘든 버그는 당연코 메모리 관리라고 할 수 있다.
C, C++에서는 하드웨어에 직접적으로 접근하는 대신 메모리 관리에 굉장히 엄격한데 C#은 GC를 통해서
이에 대한 부담을 조금 덜어준다. GC는 내부적으로 메모리를 관리해주면서 오랫동안 사용되지 않은 객체를 자동으로
해제하며, 사용되는 객체도 정돈을 하여 가용 메모리 공간을 좀 더 확장을 시킬 수도 있다.
하지만 이 때문에 메모리 해제 부분의 규칙성을 침해받을 수도 있는지 C# 가이드 라인에서도 소멸자는 되도록이면
호출하지 않는 것이 좋다고 하는데 저자 또한 finalizer와 IDisposable 키워드를 통해 메모리를 수동으로 관리하되
사용 시 굉장히 주의해아 한다고 말한다.
C와 C++에서는 각각 free와 delete를 통해 개발자가 메모리 해제 시점을 정할 수 있지만 관리 또한 개발자의 책임으로
돌리기 때문에 관리가 여간 어려운 것이 아니다. C#은 이 책임을 자기가 지지만 개발자에게 자유를 뺐었다고 생각하면
쉬울 것 같다. 심지어 finalizer는 사용하더라도 호출시기가 불명확하고 성능 또한 떨어지므로 저자는 사용을
굉장히 지향하고 있다. 대신 IDisposable 구현을 좀 더 추천하지만 C#에서는 메모리 관리는 GC에게 맡기는 편이
안전하다고 생각한다.
'C# > Effective C#' 카테고리의 다른 글
20.04.27 Chapter2. .Net 리소스 관리 (Item 13) (0) | 2020.04.27 |
---|---|
20.04.24 Chapter2. .Net 리소스 관리 (Item 12) (0) | 2020.04.24 |
20.04.17 Chapter1. C# 언어 요소 (Item 10) (0) | 2020.04.17 |
20.04.15 Chapter1. C# 언어 요소 (Item 9) (0) | 2020.04.15 |
20.04.14 Chapter1. C# 언어 요소 (Item 8) (0) | 2020.04.14 |
Comments