[C# 활용] String, StringBuilder 성능 차이
- C#/C# 문법
- 2022. 2. 8. 18:04
소개
안녕하세요.
오늘은 C# 을 사용하면서 정말 많이 다루는 타입인 문자열(String, StringBuilder) 에 대해서 알려 드리려고 합니다.
그 중에서도 팁? 이라면 팁인 String과 StringBuilder 중 어느것을 활용하는게 좋은지? 에 대한 개인적인 답을 드리려고 합니다.
이미 아시는 분들은 아시겠지만, 여러개의 문자열을 연결할 때에는 String 보다는 StringBuilder 를 이용하는것이 성능에 더 좋다고 알고 있을 것입니다.
실제로 정말 모든 문자열을 연결할 상황일 때 StringBuilder가 String 보다 매번 성능이 우수한지 한번 확인해 보겠습니다.
문자열이 많은 경우
- 다음과 같이 String, StringBudiler 에
문자열 테스트 진행합니다.
라는 문자열을 1000번 연결하는 메서드를 각각 생성해서 벤치마크 테스트를 진행하였습니다.
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System.Text;
namespace BenchMarkTest
{
class Program
{
static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<BenchMarkTest>();
}
}
[MemoryDiagnoser]
[MarkdownExporter]
public class BenchMarkTest
{
[Benchmark]
public void StringTest()
{
string str = null;
for (int index = 0; index < 1000; index++)
{
str += "문자열 테스트 진행합니다.";
}
}
[Benchmark]
public void StringBuilderTest()
{
StringBuilder str = new StringBuilder();
for (int index = 0; index < 1000; index++)
{
str.Append("문자열 테스트 진행합니다.");
}
}
}
}
실행 결과
- 실행 결과, StringBuilderTest 메서드가 StringTest 메서드에 비해 월등히 빠른것을 확인하실 수 있습니다.
| Method | Mean | Error | StdDev | Gen 0 | Gen 1 | Allocated |
|------------------ |----------:|---------:|---------:|----------:|--------:|----------:|
| StringTest | 901.17 us | 4.696 us | 4.393 us | 2672.8516 | 11.7188 | 13,712 KB |
| StringBuilderTest | 17.68 us | 0.104 us | 0.093 us | 6.2561 | 0.6104 | 32 KB |
문자열이 적은 경우
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System.Text;
namespace BenchMarkTest
{
class Program
{
static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<BenchMarkTest>();
}
}
[MemoryDiagnoser]
[MarkdownExporter]
public class BenchMarkTest
{
[Benchmark]
public void StringTest()
{
string str = null;
for (int index = 0; index < 3; index++)
{
str += "문자열 테스트 진행합니다.";
}
}
[Benchmark]
public void StringBuilderTest()
{
StringBuilder str = new StringBuilder();
for (int index = 0; index < 3; index++)
{
str.Append("문자열 테스트 진행합니다.");
}
}
}
}
실행 결과
- 연결할 문자열이 적은 경우에는, 오히려 StringBuilder보다 String으로 문자열 연결하는 방법이 더 빠른것으로 성능 측정이 되었습니다.
| Method | Mean | Error | StdDev | Gen 0 | Allocated |
|------------------ |----------:|---------:|---------:|-------:|----------:|
| StringTest | 93.80 ns | 1.605 ns | 1.648 ns | 0.0328 | 172 B |
| StringBuilderTest | 124.51 ns | 0.720 ns | 0.674 ns | 0.0472 | 248 B |
정리
- 연결할 문자열이 많은 경우에는 StringBuilder 가 String 보다 월등히 성능이 좋습니다.
- 하지만, 연결한 문자열이 적은 경우에는 String을 사용하는게 좋다고 생각합니다.
728x90
'C# > C# 문법' 카테고리의 다른 글
[C# 문법] C# 에서 IronPython 이용하여 Python 연동 (0) | 2022.03.18 |
---|---|
[C# 문법] C# .NET의 DateTime 모범 사례 (1) | 2022.02.16 |
[C# 문법] LINQ SelectMany 연산자 (0) | 2022.01.20 |
[C# 문법] Task 클래스를 이용한 비동기 처리 방법 (0) | 2022.01.16 |
[C# 문법] C# 프로세스 시작하기, 끝내기, 기다리기 (0) | 2022.01.16 |
이 글을 공유하기