2016-08-19 2 views
4

경우에 따라 응용 프로그램을 악의적 인 상황으로 유도하여 응답하는 방법을 확인하는 것이 도움이 될 수 있습니다. 네트워크 케이블을 뽑거나 전원을 끄는 것과 같이 내 응용 프로그램이 얼마나 탄력적이며 어디서해야하는지 알 수 있습니다..Net에서 OutOfMemoryException을 강제 실행하는 방법

이렇게하려면 OutOfMemoryException을 가장 빠르게 강제 실행하는 방법을 알아 내려고합니다. 간단한 콘솔 응용 프로그램에서이 시나리오를 실행하면 실행중인 응용 프로그램에이 시나리오를 삽입 할 수 있습니다. OutOfMemoryExceptions (예 : 메모리 조각화 및 가비지 수집기가 다른 세대를 할당 한 방법)을 처리 할 때 고려해야 할 사항이 분명 있지만이 실험의 범위에는 중요하지 않습니다.

업데이트
질문의 목적을 명확히하기 위해, 내가 메모리 압력이 증가 할 때 프로그램이 반응하는 방법을보고 싶어하기 때문에 단순히 메모리 부족 예외를 던지는 것은 도움이되지 않습니다주의하는 것이 중요합니다. 본질적으로, 나는 GC를 적극적인 수집 모드로 자극하고 메모리 부족 예외로 인해 프로세스가 죽을 때까지 성능에 어떤 영향을 미치는지 모니터링하려고합니다. MSDN에 따르면

+1

[내 오래된 질문] (http://stackoverflow.com/questions/6977218/parallel-foreach-can-cause-a-out-of-memory-exception-if-working-with-a -enumera)가 관심을 갖습니다. –

+0

얼마나 탄력성이있어 앱이 정전 될 수 있습니까? – Rotem

+0

http://stackoverflow.com/questions/15595061/outofmemoryexception-while-populating-emorystream-256mb-allocation-on-16gb-sys –

답변

4

일례 from MSDN ..

다음은 StringBuilder.Insert (INT32, 문자열 INT32) 메소드의 호출에 의해 던져에서 OutOfMemoryException 예외를 도시 이 예제에서는 개체의 Length 속성이 최대 용량을 초과하게하는 문자열을 삽입하려고 시도합니다.

using System; 
using System.Text; 

public class Example 
{ 
    public static void Main() 
    { 
     StringBuilder sb = new StringBuilder(15, 15); 
     sb.Append("Substring #1 "); 
     try { 
     sb.Insert(0, "Substring #2 ", 1); 
     } 
     catch (OutOfMemoryException e) { 
     Console.WriteLine("Out of Memory: {0}", e.Message); 
     } 
    } 
} 
// The example displays the following output: 
// Out of Memory: Insufficient memory to continue the execution of the program. 

또한 오류를 수정하는 방법을 알려줍니다.

다른 StringBuilder 생성자 오버로드를 호출하여 StringBuilder.StringBuilder (Int32, Int32) 생성자에 대한 호출을 바꿉니다. StringBuilder 객체의 최대 용량은 기본값 인 Int32.MaxValue로 설정됩니다.

StringBuilder 개체에 대한 확장을 수용 할 수있을만큼 큰 maxCapacity 값으로 StringBuilder.StringBuilder (Int32, Int32) 생성자를 호출합니다.

2

: 당신은 그것의 StringBuilder.MaxCapacity 속성에 의해 정의 된 길이를 넘어 모두 StringBuilder 개체를 확장하려고

  • :

    에서 OutOfMemoryException 예외가 두 가지 주요 원인이있다.

  • 공용 언어 런타임은 작업을 성공적으로 수행하기에 충분한 연속 메모리를 할당 할 수 없습니다. 메모리 할당이 필요한 속성 할당 또는 메서드 호출에 의해 throw 된 이 예외가 될 수 있습니다. OutOfMemoryException 예외의 원인에 대한 자세한 내용은 "메모리 부족"이 실제 메모리를 참조하지 않는 것을 참조하십시오.

    이 OutOfMemoryException 예외 유형은 치명적인 오류를 나타냅니다. 예외를 처리하도록 선택한 경우 에는 Environment.FailFast 메서드를 호출하여 응용 프로그램을 종료하고 시스템 이벤트 로그에 항목을 추가하는 catch 블록이 포함되어야합니다 (예 : ).

쉬울 것 나에게 스트링 빌더 첫 번째 보인다.

이 작동 :

var sb = new StringBuilder(5, 5); 
sb.Insert(0, "hello", 2); 
관련 문제