C# 메모리 부족예외
C#의 OutOfMemoryException은 프로그램 실행을 계속하기에 충분한 메모리가 없을 때 .NET 프레임워크 실행 엔진에서 발생하는 예외입니다. 이름에서 알 수 있듯이 이 예외는 CLR, 즉 공용 언어 런타임이 프로그램의 특정 작업을 수행하는 데 필요한 충분한 메모리를 할당할 수 없을 때 프로그램에서 발생합니다.
이 예외는 항상 메모리에 사용 가능한 공간이 충분하지 않다는 의미는 아니지만 때로는 프로그램 할당에 필요한 연속 메모리가 충분하지 않음을 의미합니다.
구문
C#에서 OutOfMemoryException을 catch하는 구문은 다음과 같습니다.
try { //user code which can throw OutOfMemoryException } catch(OutOfMemoryException <em>exception</em>) { //statements to handle the exception }
C#에서 OutOfMemoryException을 발생시키는 구문은 다음과 같습니다.
throw new OutOfMemoryException();
위 문장에서 'throw'는 C#에서 예외를 발생시키는 데 사용되는 키워드입니다.
C#에서 OutOfMemoryException이 어떻게 작동하나요?
C#에서는 프로그램 실행을 계속할 공간이 충분하지 않으면 OutOfMemoryException이 발생합니다. 이 예외가 발생하는 데는 여러 가지 이유가 있을 수 있습니다. 또한 프로그램을 실행할 충분한 공간이 있지만 이 공간이 프로그램에서 수행하는 데 필요한 할당에 연속되지 않는 경우에도 이 예외가 발생합니다. 이 예외가 발생하는 두 가지 주요 이유는 다음과 같습니다.
StringBuilder의 MaxCapacity 속성에 지정된 길이 이상으로 StringBuilder 개체의 길이를 늘리려고 합니다.
"메모리가 부족하여 프로그램을 계속 실행할 수 없습니다."라는 예외가 발생합니다.
- 메모리 할당이 필요한 메서드를 할당하거나 호출하는 동시에 CLR이 할당에 필요한 연속 메모리를 충분히 제공할 수 없으면 OutOfMemoryException이 발생합니다.
이 예외의 원인이 될 수 있는 다른 이유는 다음과 같습니다.
- 가상 메모리가 2GB만 있는 32비트 시스템에서 애플리케이션을 실행하면 CLR에서 애플리케이션에 필요한 할당에 연속 메모리를 제공하기가 어렵습니다.
- 파일 처리기, 데이터베이스 연결, 포인터 등과 같은 관리되지 않는 리소스로 작업한 후 이러한 리소스를 폐기하지 않으면 메모리 누수가 발생하여 결과적으로 애플리케이션 성능이 저하되고 OutOfMemoryException이 발생할 수 있습니다.
- 대규모 데이터 세트로 작업하려면 엄청난 양의 메모리가 필요하며 CLR에 사용 가능한 연속 공간이 충분하지 않으면 OutOfMemoryException이 발생합니다.
- 문자열은 변경할 수 없으므로 문자열에 대해 수행되는 작업은 메모리에 새 문자열을 생성합니다. 따라서 큰 문자열을 사용하여 작업하고 해당 문자열에 대해 연결 작업을 반복적으로 수행하면 여러 메모리 할당이 발생하여 결과적으로 애플리케이션 성능이 저하되고 OutOfMemoryException이 발생할 수 있습니다.
- 매우 오랜 기간 동안 여러 개체를 메모리에 고정한 경우 가비지 수집기가 이러한 개체에 연속적인 메모리 할당을 제공하기가 어려워집니다.
예
아래에 언급된 예시는 다음과 같습니다
예시 #1
StringBuilder 개체를 최대 용량 이상으로 확장하려고 할 때 프로그램에서 발생하는 OutOfMemoryException을 보여주는 예
코드:
using System; using System.Text; public class Program { public static void Main() { StringBuilder stringBuilder = new StringBuilder(17, 17); stringBuilder.Append("Welcome to the "); try { stringBuilder.Insert(0, "world of C# programming", 1); Console.WriteLine(stringBuilder.ToString()); Console.ReadLine(); } catch (OutOfMemoryException exception) { Console.WriteLine(exception.Message); Console.ReadLine(); } } }
출력:
예시 #2
추가할 요소 수가 목록의 용량보다 많은 경우 목록에 요소를 추가하려고 시도하는 중 OutOfMemoryException이 발생하는 프로그램의 예
코드:
using System; using System.Text; using System.Collections.Generic; namespace ConsoleApp4 { public class Program { public static void Main() { try { string[] strArray = GetArray(); Console.WriteLine(strArray); Console.ReadLine(); } catch (OutOfMemoryException exception) { Console.WriteLine(exception); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.ReadLine(); } } public static string[] GetArray() { List<string> strList = new List<string>(); for (int i = 0; i <= int.MaxValue; i++) { strList.Add("Hello"); } return strList.ToArray(); } } }
출력:
C#에서 OutOfMemoryException을 방지하는 방법은 무엇입니까?
다음 사항을 염두에 두면 C#에서 OutOfMemoryException을 피할 수 있습니다.
- StringBuilder로 작업하는 동안 이 예외를 방지하려면 생성자 StringBuilder.StringBuilder(Int32, Int32)를 호출하고 MaxCapacity 속성을 해당 StringBuilder를 확장할 때 필요한 편의를 제공할 만큼 큰 값으로 설정할 수 있습니다. 개체입니다.
- 32비트 시스템에서 작업하는 동안 이 예외를 방지하려면 아래 단계에 따라 Visual Studio에서 애플리케이션을 32비트에서 64비트 시스템으로 다시 컴파일할 수 있습니다.
- 메뉴바 -> 빌드 -> 구성 관리자
- Active Solution Platform 목록을 클릭하고 64비트 플랫폼을 선택한 후 닫기 버튼을 클릭하세요.
- 목록에서 새 옵션을 클릭하세요
- 새 솔루션 플랫폼 창에서 '새 플랫폼 입력 또는 선택' 목록을 클릭한 후 'x64' 옵션을 선택하세요.
- 확인 버튼을 클릭하세요.
- 관리되지 않는 리소스로 작업하는 동안 이 예외가 발생하지 않도록 하려면 더 이상 필요하지 않은 관리되지 않는 리소스로 작업을 완료한 후 항상 Dispose() 메서드를 호출해야 합니다.
- 대규모 데이터 세트로 작업하는 동안 이러한 예외를 방지하려면 데이터를 필터링한 다음 처리에 필요한 데이터만 전달해야 합니다.
- 큰 문자열로 작업하거나 큰 문자열 연결을 수행하는 동안 이 예외를 방지하려면 문자열 대신 StringBuilder를 사용할 수 있습니다. StringBuilder는 변경 가능하고 작업을 수행할 때 문자열의 새 인스턴스를 생성하지 않기 때문입니다.
목록에서 64비트 플랫폼을 사용할 수 없는 경우:
결론
OutOfMemoryException은 메모리가 부족하거나 C# 프로그램에 필요한 할당을 위한 연속 메모리가 부족함을 프로그래머에게 알리는 런타임 예외입니다.
이 예외를 방지하려면 사용자는 항상 필요한 예방 조치를 취하고 이 예외를 처리해야 합니다.
위 내용은 C# 메모리 부족예외의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

C#을 사용한 Active Directory 가이드. 여기에서는 소개와 구문 및 예제와 함께 C#에서 Active Directory가 작동하는 방식에 대해 설명합니다.

C#의 난수 생성기 가이드입니다. 여기서는 난수 생성기의 작동 방식, 의사 난수 및 보안 숫자의 개념에 대해 설명합니다.

C# 데이터 그리드 뷰 가이드. 여기서는 SQL 데이터베이스 또는 Excel 파일에서 데이터 그리드 보기를 로드하고 내보내는 방법에 대한 예를 설명합니다.

멀티 스레딩과 비동기식의 차이점은 멀티 스레딩이 동시에 여러 스레드를 실행하는 반면, 현재 스레드를 차단하지 않고 비동기식으로 작업을 수행한다는 것입니다. 멀티 스레딩은 컴퓨팅 집약적 인 작업에 사용되며 비동기식은 사용자 상호 작용에 사용됩니다. 멀티 스레딩의 장점은 컴퓨팅 성능을 향상시키는 것이지만 비동기의 장점은 UI 스레드를 차단하지 않는 것입니다. 멀티 스레딩 또는 비동기식을 선택하는 것은 작업의 특성에 따라 다릅니다. 계산 집약적 작업은 멀티 스레딩을 사용하고 외부 리소스와 상호 작용하고 UI 응답 성을 비동기식으로 유지 해야하는 작업을 사용합니다.

XML 형식을 수정하는 방법에는 여러 가지가 있습니다. Notepad와 같은 텍스트 편집기로 수동으로 편집; XMLBeautifier와 같은 온라인 또는 데스크탑 XML 서식 도구와 자동 포맷; XSLT와 같은 XML 변환 도구를 사용하여 변환 규칙을 정의합니다. 또는 Python과 같은 프로그래밍 언어를 사용하여 구문 분석하고 작동합니다. 원본 파일을 수정하고 백업 할 때주의하십시오.
