- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- Administrator's Guide
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
",t};e.buildCustomizationMenuUi=t;function n(e){let t='
",t}function s(e){let n=e.filter.currentValue||e.filter.defaultValue,t='${e.filter.label}
`,e.filter.options.forEach(s=>{let o=s.id===n;t+=``}),t+="${e.filter.label}
`,t+=`ID: csharp-best-practices/stackallow-loops
Language: C#
Severity: Warning
Category: Performance
The rule “Do not use stackalloc in loops” is crucial to maintain efficient memory usage in your C# applications. stackalloc
is a keyword in C# that allows you to allocate a block of memory on the stack, which is a limited resource. When used inside a loop, stackalloc
may cause a rapid increase in memory usage that could lead to a StackOverflowException, especially if the loop iteration count is high or unpredictable.
It is important to remember that stack space is limited, and overuse can lead to stack overflow errors, which are generally hard to recover from. The memory allocated by stackalloc is automatically freed when the method that contains the stackalloc
expression returns, but in a loop, the memory allocated in each iteration will not be freed until the method returns, which could be much later.
Use stackalloc
outside loops, preferably in a method scope where the allocated memory size is clearly defined and limited. You can clear or reset the buffer after each iteration if needed. This practice ensures that the stackalloc
memory is efficiently managed and prevents potential stack overflow issues.
using System;
class Program
{
static void Main()
{
for (int i = 0; i < 10; i++)
{
Span<int> buffer = stackalloc int[10];
buffer[0] = i;
Console.WriteLine(buffer[0]);
}
}
}
using System;
class Program
{
static void Main()
{
Span<int> buffer = stackalloc int[10]; // stackalloc used only once, outside the loop
for (int i = 0; i < 10; i++)
{
buffer.Clear(); // Optional: reset buffer contents
buffer[0] = i;
Console.WriteLine(buffer[0]);
}
}
}