생활
c#은 메모리 관리를 어떻게 하나요?
가비지 컬렉터(garbage collector)가 자동으로 메모리 관리를 해주는 것이 c#의 특징이지만 실제로는 메모리가 반환지 않는 경우가 있습니다. 그럴 경우에는 어떻게 해야 하나요??
55글자 더 채워주세요.
3개의 답변이 있어요!
말씀하신대로
가비지 컬렉터가 자동으로 메모리 관리를 해줍니다.
여러가지로 유용하지만(실수방지 신경쓰지않어서 좋음 c c++ 포인터 사용대비)
문제는 말씀하신것처럼 강제로 반환이 필요한 경우인데요
System.GC.Collect()
명령어를 통해 가비지 컬렉터를 강제로 호출되면서 메모리에 있는 객체들이 해제됩니다.
가비지 컬렉터 건드리는 타이임이 쉽지는 않더라구요
C#은 강력한 언어로, 자동 가비지컬렉션이 구동되며,
메모리를 자동으로 반환하지 않는다면 코드 작성자의 잘못입니다.
예를 들어 MemoryStream을 사용하여 Read, Write를 한다면
이후, Close()나 임의작성 메서드로 해당 Stream을 종료시켜주어야
메모리 누수가 발생하지 않습니다.
아마 자동으로 메모리 반환이 되지 않았다면, 사용자가 해당 메서드나 스트림을 계속 열어두었을 가능성이 높습니다.
안녕하세요
C# 자체에 가비지 컬렉터가 있어 사용하지 않는 메모리는 반환한다고 하는데, 실제로 반환되지 않는 경우는 강한참조는 자동반환이 되지 않습니다.
이러한 경우 dispose 함수를 따로 만들어 참조를 해제해 주는 것이 좋습니다.
아니면 GC.Collect()를 직접 호출하는 것도 좋은 방법입니다.