CWN(CHANGE WITH NEWS) - C#에서 StringBuilder로 성능 개선하는 방법은?

  • 흐림봉화19.2℃
  • 흐림함양군21.8℃
  • 구름많음영광군22.1℃
  • 흐림금산21.0℃
  • 흐림충주20.2℃
  • 구름많음청주22.6℃
  • 흐림군산22.1℃
  • 흐림안동20.9℃
  • 구름많음서울22.9℃
  • 구름많음남해21.4℃
  • 흐림동두천21.5℃
  • 흐림영주19.5℃
  • 흐림청송군19.4℃
  • 구름많음순창군21.9℃
  • 흐림천안20.7℃
  • 흐림수원22.2℃
  • 구름조금북부산22.1℃
  • 구름많음인천22.7℃
  • 흐림속초20.2℃
  • 흐림밀양23.2℃
  • 구름조금성산23.0℃
  • 흐림포항20.9℃
  • 구름많음대전21.4℃
  • 구름많음전주22.6℃
  • 흐림광주21.9℃
  • 구름많음제주24.5℃
  • 흐림홍천20.6℃
  • 흐림원주20.6℃
  • 흐림보은20.3℃
  • 구름많음해남21.4℃
  • 흐림울진20.6℃
  • 흐림대관령12.6℃
  • 구름많음세종21.6℃
  • 흐림영천19.9℃
  • 흐림목포22.0℃
  • 구름많음북강릉18.8℃
  • 구름많음양산시22.5℃
  • 구름많음거제22.4℃
  • 흐림보령22.6℃
  • 구름많음백령도20.7℃
  • 흐림파주21.0℃
  • 구름많음철원21.0℃
  • 흐림강진군20.7℃
  • 구름많음동해19.1℃
  • 흐림서산21.2℃
  • 구름조금부산22.2℃
  • 구름많음김해시22.3℃
  • 흐림상주20.9℃
  • 구름많음창원22.3℃
  • 흐림진도군21.7℃
  • 흐림의성20.2℃
  • 구름많음보성군21.7℃
  • 흐림영월19.1℃
  • 구름많음흑산도21.2℃
  • 흐림태백16.7℃
  • 흐림장수19.5℃
  • 구름많음임실19.9℃
  • 흐림부여20.6℃
  • 흐림여수23.1℃
  • 흐림합천21.7℃
  • 흐림의령군20.8℃
  • 흐림대구21.6℃
  • 구름많음강릉20.0℃
  • 흐림양평20.9℃
  • 흐림서청주21.3℃
  • 흐림정선군18.2℃
  • 흐림이천20.6℃
  • 흐림춘천21.5℃
  • 흐림홍성21.9℃
  • 흐림추풍령20.1℃
  • 구름많음광양시22.6℃
  • 구름많음고창21.8℃
  • 맑음고흥21.1℃
  • 구름많음완도21.7℃
  • 구름조금고산23.2℃
  • 구름많음통영22.7℃
  • 흐림영덕20.1℃
  • 구름많음장흥20.5℃
  • 흐림울산20.9℃
  • 흐림산청21.2℃
  • 흐림문경20.6℃
  • 흐림부안22.0℃
  • 흐림경주시20.1℃
  • 구름많음울릉도21.4℃
  • 흐림제천19.4℃
  • 흐림정읍22.4℃
  • 흐림거창20.7℃
  • 흐림북춘천21.3℃
  • 구름많음북창원23.0℃
  • 흐림인제19.1℃
  • 흐림남원22.0℃
  • 구름많음순천21.2℃
  • 흐림고창군21.8℃
  • 흐림구미21.5℃
  • 흐림강화20.6℃
  • 구름많음진주21.3℃
  • 구름많음서귀포25.2℃
  • 2025.10.04 (토)

C#에서 StringBuilder로 성능 개선하는 방법은?

오영주 / 기사승인 : 2021-11-26 20:34:25
  • -
  • +
  • 인쇄

C# 언어를 사용할때 좀더 빠르고 효율적으로 작업할 수는 없을까? 특히 문자열 작업은 .NET에서 변경할 수 없는 유형이라 좀더 효율적인 방법이 필요하다. .NET에서 String 개체를 수정하면 새 데이터를 보유하기 위해 메모리에 새 String 개체가 매번 생성된다.

반면, StringBuilder 개체는 변경할 수 있는 문자열을 나타내며, 문자열 크기가 커짐에 따라 메모리 할당을 동적으로 확장한다. 따라서 StringBuilder를 사용하면 성능을 향상시키기 위해 용량을 설정할 수 있고, 생성할 문자열의 크기를 알고 있다면 그에 따라 초기 용량을 설정하여 메모리 할당도 상당히 줄일 수 있다.

또한 재사용 가능한 StringBuilder 개체 풀을 사용하여 할당을 방지함으로써 StringBuilder 성능을 향상시킬 수 있으며, StringBuilderCache를 사용하면 문자열을 훨씬 빠르게 적은 할당으로 등록할 수 있다.

StringBuilderCache는 .NET 및 .NET Core에서 사용할 수 있는 내부 클래스다. StringBuilder의 여러 인스턴스를 만들어야 할 때마다 StringBuilderCache를 사용하면 할당 비용을 상당히 줄일 수 있다.

그렇다면, 이러한 성능 향상은 어떠한 방식으로 할 수 있을까? 다음의 과정을 통해 진행해보도록 하자

1. Visual Studio에서 콘솔 애플리케이션 프로젝트 만들기
먼저 Visual Studio에서 .NET Core 콘솔 애플리케이션 프로젝트를 생성해야 한다. 시스템에 Visual Studio 2019가 설치되어 있다고 가정하고 새 .NET Core 콘솔 애플리케이션 프로젝트를 만든다. 그러면 Visual Studio 2019에서 새 .NET Core 콘솔 애플리케이션 프로젝트가 생성된다.

2. BenchmarkDotNet NuGet 패키지 설치
BenchmarkDotNet 은 .NET 코드를 벤치마킹하기 위한 가벼운 오픈 소스 라이브러리다.BenchmarkDotNet을 사용하려면 BenchmarkDotNet 패키지를 설치해야 한다. Visual Studio 2019 IDE 내에서 NuGet 패키지 관리자를 통해 또는 NuGet 패키지 관리자 콘솔에서 명령을 실행하여 이 작업을 수행할 수 있다.

3. StringBuilderCache를 사용하여 할당 줄이기

StringBuilderCache는 StringBuilder 인스턴스를 캐싱한 다음 새 StringBuilder 인스턴스가 필요할 때 다시 사용하여 작동한다. 메모리에 StringBuilder 인스턴스가 하나만 있으면 되므로 할당이 줄어든다.

코드로 설명해본다면, Program.cs 파일에 StringBuilderBenchmarkDemo라는 클래스를 만든후, AppendStringUsingStringBuilder라는 메서드를 만든다. 다음으로 AppendStringUsingStringBuilderCache라는 메서드를 만든다.이후 BenchmarkRunner 클래스를 사용하여 초기 시작점을 지정한다.

이제 릴리스 모드에서 프로젝트를 컴파일하고 벤치마킹을 실행하면 완료된다.

[저작권자ⓒ CWN(CHANGE WITH NEWS). 무단전재-재배포 금지]

최신기사

뉴스댓글 >

- 띄어 쓰기를 포함하여 250자 이내로 써주세요.
- 건전한 토론문화를 위해, 타인에게 불쾌감을 주는 욕설/비방/허위/명예훼손/도배 등의 댓글은 표시가 제한됩니다.

댓글 0

Today

Hot Issue