2017-12-22 80 views
-2

목록에 포함 할 수있는 최대 개체 수를 예측하거나 계산할 수있는 방법은 C#에서 List<Model>입니까? 모델에는 string int double float compostiedatatype과 같은 많은 속성이 있습니다.목록의 최대 길이는 C#에서 <Model>을 어떻게 결정할 수 있습니까?

우리가 List<int>을 가지고 있다면 그것은 간단합니다. 최대 크기는 2^32입니다. 오브젝트가 복합 데이터 유형이면 어떻게 될까요? 우리는 모델의 각 속성의 바이트를 계산하고 그것을 합산해야합니까?

object 
{ 
int byte 
double byte 
string byte 
} 

개체의 크기는 = calculate (속성의 각 바이트 추가) ??

what is the max limit of data into list<string> in c#?

내가 아래의 코드에서 말할 수있는 무엇 EDIT?

While(true) 
{ 
    try 
    { 
     listModel.add({add model}); 
    } 
    catch(Exception overflow) 
    { 
     listModel.Count(); 
    } 
} 

카운트가 32 그래서 난 목록 32 개체를 포함 할 수 예측할 수있는 경우?

내가 메모리에 대해 관심을 가져야 왜 내가 메모리에 대해 궁금

, 지점 곳이 내가 메모리의 개체에 사용자가 우리가 내가 궁금 목록에있는 데이터를 삽입 삽입 할 때마다 목록이 있다고 가정 내 응용 프로그램이 무너질 것인가? 내 접근 방식을 다시 생각해야할까요? 메모리 데이터에서 사전 검색 시간과 같은 빠른 검색 시간은 O (1)입니다. ??

+1

당신이 이미 링크 한 질문에 대한 대답은 이미 참조 유형에 대해 참조가 목록에 각각 4 또는 8 바이트로 저장되어 있다고 언급했습니다. –

+0

그것은 제가 질문에서 언급 한 것처럼 모델에 대한 각 속성의 크기를 계산해야한다는 뜻입니까? –

+0

@ 존 에드 그것은 당신이 계산하려고하는 것에 달려 있습니다. 전체 프로그램의 메모리 사용량을 예측하고 싶다면 아마도 당신이 제안한 것을해야 할 것입니다. 그러나 OS에는 사용법을 바꾸기위한 슬리브가 많이 있습니다. List 객체의 메모리 사용량을 구체적으로 예측하려는 경우 목록에 저장된 포인터의 메모리 사용량을 합계 할 수 있습니다. List는 실제 객체를 저장하지 않으며 사용자가 만든 객체에 대한 참조 만 포함합니다. – Glubus

답변

0

의견에 잠시 질문을하신 후 가능한 한 최선을 다해 답변하려고 노력하겠습니다. 당신이 묻고있는 것을 이해하는 것이 다소 어렵습니다. 초등 저울을 배우기 때문에, 당신이 모르는 어떤 것뿐만 아니라 당신의 문법이 정말로 나쁘다는 사실도 의심 스럽습니다.

개수가 32이므로 목록에 32 개의 개체 만 포함될 수 있습니다. 카운트가 32이면 을 의미합니까? 이렇게하면 new List<object>(32);, 목록 뒤에있는 배열을 크기가 32 인 경우에만 인스턴스화합니다. 목록은 배후에 배열이며 일부 추가 된 기능은 .Add()입니다. 33 번째 개체를 추가하면 더 큰 크기의 새 배열이 만들어지고 새 개체를 계속 추가 할 수 있도록 모든 개체가 새 배열에 복사됩니다.

계속 추가하고 추가하면 분명히 프로그램의 메모리가 부족합니다. 웹 애플리케이션의 경우, 대부분의 사람들은 데이터베이스 (또는 심지어 파일 시스템)와 같은 일종의 지속성을 사용합니다. 프로그램 메모리가 부족하다고 걱정되면 List을 사용하지 말고 데이터베이스를 사용하십시오. 데이터베이스는 하드 디스크의 모든 공간을 사용합니다. 내 응용 프로그램이 무너질 지점이 있습니다 - 귀하의 프로그램이 OutOfMemoryException에게 귀하의 목록이 너무 커지면 줄 것입니다. (즉 O(1)) 메모리 사용 시간 복잡도와 무관 - 메모리 데이터

사전 검색 시간 등 빠른 복구 시간이 O(1)이다. A List은 메모리에 저장되어있어 상대적으로 (하드 디스크 대비) 빠른 IO 읽기 작업을 허용합니다. O(1) 시간은 알고리즘 복잡성에 대해 뭔가를 말합니다. 예를 들어, C#에서 배열에 액세스하는 것은 O(1) 복잡한 작업입니다.

+0

귀중한 피드백을 돌려 주셔서 감사합니다. –