2023. 12. 28. 21:26ㆍ개발/C#
오늘 회사에서 코드리뷰를 진행했다.
현재 내가 진행중인 프로젝트를
주 2회 코드리뷰를 진행중이다.
코드리뷰를 진행하면서
한 가지 피드백이 있었다.
private void WriteGumiIssue(Excel.Worksheet secondSheet)
{
for(int i = 0;i<companyMgr.GumiCompanyList.Count;i++)
{
string issueChannelInfo = ""; // 반복문 내 변수선언
CompanyInfo company = companyMgr.GumiCompanyList[i]; // 반복문 내 class 선언
if (company.Channels.Count == 0)
{
continue;
}
for(int j = 0; j < company.Channels.Count; j++)
{
CompanyChannelInfo channel = company.Channels[j]; // 반복문 내 class 선언
issueChannelInfo += channel.ChannelIp + " " + channel.ConnectionStatus + " 수신율 : " + channel.ReceiveRatio + "\r\n";
}
.
.
.
.
}
}
반복문 내 선언에 대한 피드백을 받았다.
팀 내 부장님께서는
위 코드처럼 작성하면
메모리나 성능에 문제가 된다.
for문의 크기인 companyMgr.GumiCompanyList.Count 의 크기만큼
변수 및 class가 선언될때마다 메모리 영역이 할당된다
피드백을 들었을 당시
아 그렇구나 수정해야겠다
생각하고, 대답했지만
퇴근할때 쯤 되니 궁금해졌다.
왜 문제가 되는지 더 자세히 알고싶어져서
퇴근 후 집가서 알아봐야지~ 하고
이제서야 알아본 내용이다.
결론
결론은
상관없다 or 오히려 계산이 더 빠르다
프로그램이 운영체제로부터 할당받는
메모리 공간은 크게 4가지가 있다.
코드, 데이터, 스택, 힙
오늘 중점적으로 다룰건 스택 & 힙 2가지다.
1.스택
- 일시적으로 사용 & 사용 후 삭제되는 영역
- 해당 객체가 사용된 스코프를 벗어날 시, 삭제됨
- ex) 지역변수, 매개변수는 함수 종료 시 삭제
2.힙
- GC ( Garbage Collector ) 에 의해 메모리 자동 관리됨
- malloc() & new 를 통해 메모리 할당, free() & delete 를 통해 메모리 해제
- 선입선출 ( FIFO ) 방식
private void WriteGumiIssue(Excel.Worksheet secondSheet)
{
for(int i = 0;i<companyMgr.GumiCompanyList.Count;i++)
{
string issueChannelInfo = ""; // 반복문 내 변수선언
CompanyInfo company = companyMgr.GumiCompanyList[i]; // 반복문 내 class 선언
if (company.Channels.Count == 0)
{
continue;
}
for(int j = 0; j < company.Channels.Count; j++)
{
CompanyChannelInfo channel = company.Channels[j]; // 반복문 내 class 선언
issueChannelInfo += channel.ChannelIp + " " + channel.ConnectionStatus + " 수신율 : " + channel.ReceiveRatio + "\r\n";
}
.
.
.
.
}
}
즉, 나의 경우
지역변수를 for문 내에 선언했기 때문에
어차피 스택으로 관리되는 메모리라
함수 종료 시 삭제된다.
-> 성능에 큰 영향 미치지 않음
오히려 스코프 기준으로 봤을 때
외부에서 사용할 변수가 아니므로
for 내부에 위치하는게
더 효율적이라 할 수 있을 것 같다.
'개발 > C#' 카테고리의 다른 글
소프트웨어 설계 수정 (0) | 2024.01.08 |
---|---|
모니터링 자동화 - API Parsing (1) | 2024.01.01 |
모니터링 자동화 - 비동기 변경 (0) | 2023.12.24 |
모니터링 자동화 - Excel Write (2) | 2023.12.21 |
모니터링 자동화 - Teamviewer 상태 관리 (1) | 2023.12.18 |