일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- MDB Connect
- solid
- TDD
- c#
- WPF
- JSON
- 시
- sqlite3
- C# MDB Handle
- NUnit
- 경기도 버스정보시스템
- Winform
- delegate
- 공공 데이터 포털
- DrawRectangle
- 버스 API
- GDI+
- DrawEllipse
- eventhandler
- Cell Border Style
- MVC
- MDB Select
- 경기도 버스
- 디자인 패턴
- Excel Cell Format
- Json.NET
- C# MDB
- 객체지향
- eventargs
- C# 파일 암/복호화
- Today
- Total
White Whale Studio
[Effective Coding for Memory] 본문
c#에서는 Garbage Collector가 활동을 하기 때문에 기존의 c, c++보다 메모리 관리가 용이해졌다고합니다.
하지만, 지금까지 경험부족, 실력부족으로 메모리 관리에 대한 필요성을 느껴왔었는데요.
c#에서도 메모리 누수가 충분히 일어날수 있다는 사실을 알고 있기 때문에 가능한 한 이러한 메모리 누수를 줄이기 위한
방법을 해당 포스팅에 정리해보고자 합니다.
------------------------------------------------------
string 작업시에는 "+" 연산자보다는 System.Text.StringBuilder를 사용하자.
개인적으로는 계속 사용하던 연산자라 그런지 + 연산자를 사용하게 되면 매우 쉽습니다. 코딩하기도 편합니다.
그러나 + 연산자를 사용할때마다 새로운 string instance가 생성된다고 하네요.
반면에 stringbuilder를 사용하게 되면 기존에 생성된 instance에 append 하는 방식으로 사용하기 때문에
+ 연산자에 비해 메모리 점유가 줄어들겠죠.
stringbuildler는 이미 선언하여 확보해둔 메모리 공간에 문자열만 복사해뒀다가 ToString()으로 string 객체를 생성합니다.
MSDN에 있는 성능 관련 부분을 확인해보면 좋을것같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | StringBuilder sb = new StringBuilder(); public void Print() { sb.Append("["); sb.Append("index"); sb.Append("]"); sb.Append("value"); sb.AppendLine(); Console.WriteLine(sb.ToString()); //// AppendFormat 사용 sb.Clear(); sb.AppendFormat("[{0}]{1}", "index", "value"); Console.WriteLine(sb.ToString()); } | cs |
Append만을 사용한 코드와 AppendFormat을 사용한 코드입니다. 필요에 따라 사용하시면 될것같군요
결과값은 [index]value 로 두 방법 모두 동일합니다.
이 외에도
- Immutable 객체의 값 접근 시 매번 메모리가 생성될 수 있으므로 주의(string과 유사한 케이스)
클래스에 Dispose 메서드를 구현하여 원하는 때에 객체를 해제합니다.
가 있겠습니다.
요즘은 워낙 고사양이고 c# 자체에서 관리를 해준다고는 하지만 어느정도는 메모리 관리를 해야할 필요가 있는것
같습니다.
'IT Engineering > C#.net' 카테고리의 다른 글
C# Firefox Runtime Package - XulRunner - Gecko (0) | 2017.02.15 |
---|---|
[Nunit] 테스트 해보기 (0) | 2016.08.12 |
닷넷 프레임워크가 필요없는 포터블 exe 만들기 (0) | 2016.08.10 |
[JSON] C#에서 사용하기 (0) | 2016.08.09 |
[JSON] 기본적인 내용 (0) | 2016.08.09 |