[C#] List.Clear() vs List = null

2023. 1. 30. 14:34STUDY/C#

728x90
반응형

clear와 null 대입은 그 의미가 다릅니다.

clear는 다음에 그 객체를 재사용할 수 있다는 의미가 되고요, null대입은 그 List 자체를 날리겠다는 의미니깐요.
List<object> 안에 3000개를 넣었다면 C++로 치자면 vector에 reserve(3000); resize(3000); 을 호출해 준 상황과 유사한 메모리 상태라고 생각됩니다. 여기에 null대입을 하면 GC는 List가 확보하고 있는 메모리와, 그 안의 구성요소 모두를 GC 대상으로 설정하겠죠.
Clear를 호출한 경우라면 reserve(3000)은 남아있는 상태에서 capacity는 변동이 없을겁니다. 안의 구성요소들은 GC대상으로 설정될 수 있겠네요.
 
뿐만 아니라 GC는 즉각적이지 않습니다. 따라서 Clear뒤에 바로 null대입하는건 GC입장에서는 큰 차이가 없을 가능성이 높다고 보여지네요. 의미없을 정도로 아주 근소하게 후자(바로 null대입)가 나을수도 있겠는데? 하는 생각이 듭니다.
 
C#에서 중요한건 코드 작성자의 의도라고 생각합니다. Clear 메서드 호출은 '이 List가 비워지고 메모리 영역을 재사용할거야'하는 느낌을 주고, null대입은 '절때 사용하지 않을거야.' 의 느낌이 강합니다.
만약 코드 위에서 List를 선언하고, 코드의 중간 임의 위치에서 null대입하는 방식으로 짠다면 코드가 조금만 길어져도 헬일 가능성이 다분하기때문에 추천드리긴 어려워보이네요.

https://answers.unity.com/questions/1129002/arrarys-difference-between-clear-and-null.html
http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_QnA_etc&no=5004

 

 

728x90
반응형