2012-07-03 3 views
0

메모리 예외를 벗어나서이 범위 (코드)를 수용 할 수있는 목록을 어떻게 작성해야합니까?메모리 부족 예외 C# 목록

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var l1 = Enumerable.Range(999900000, 1000000000).ToList(); 
      l1.ForEach(f => Console.WriteLine(f)); 
     } 
    } 
} 
+0

처럼 루프 후 이것을 사용하면 32 비트 또는 64 비트 버전을 실행하고 있습니까? – weismat

+0

[C# 응용 프로그램에서 메모리 부족 예외가 발생하는 이유는 무엇입니까?] (http://stackoverflow.com/questions/597499/why-am-i-getting-an-out-of-memory-exception -in-my-c-sharp-application) –

+0

32 비트 버전 –

답변

7

List<T>로 변환하지 마십시오, 단지 열거 :

var l1 = Enumerable.Range(999900000, 1000000000); 
foreach(var f in l1) 
    Console.WriteLine(f); 
+3

정확하게 게으른 평가가 만들어진 이유는 무엇입니까? –

2

당신이 이미 내용을 알고 특히 목록에 필요한 모든 데이터를 수집하지만, 열거를 사용하지 마십시오, 이렇게하면 앱의 메모리 사용 공간을 줄일 수 있습니다.

예를 들어

:

IEnumerable<int> GetNextInt() 
    { 
     for(int i=999900000; i< 1000000000; i++) 
     { 
      yield return i; 
     } 
    } 

foreach(var integer in GetNextInt()) 
{ 
    //do something.. 
}