2010-07-31 3 views
2

C#에서 작은 WinForm 응용 프로그램을 작성했습니다. 만들어지는 EXE는 74 KB이고 모두 리소스와 함께 모든 크기는 179 Kb입니다. 하지만 실행하면 작업 관리자에 따라 메모리에 9.1MBs이 걸립니다.C# - 응용 프로그램 메모리 문제

그래서 제 질문은 :

는 는
  • 는 왜 일어나고
      ?
    • 이 크기를 줄이려면 어떻게해야합니까?
    • 크기를 줄일 수있는 경우 얼마나 줄일 수 있습니까?
  • 답변

    3

    첫째, 작업 관리자를 사용하여 메모리 사용량을 확인하는 것은 위험합니다. 더 명확한 이해를 얻으려면 this article을 읽으십시오.

    • 다른 어떤 라이브러리를 참조하고 있습니까?
    • 스트림이나 다른 방법으로 어떤 파일을로드합니까?
    • P/Invoke를 통해 운영 체제에서 어떤 리소스를 요청합니까?
    • 얼마나 많은 폼을로드합니까?
    • 얼마나 많은 변수를 만들고 크기를 조정합니까? 예를 들어

    는 :

    // Will take up a lot of memory! 
    var x = new byte[int.MaxValue]; 
    

    말했다 모든, 9.1MB 정말 훨씬 더 중요하고 (2GB의 RAM spec'd 기계의 메모리 미만 0.5 %) 아니다 응용 프로그램이 9.1Mb의 RAM을 사용하는 것이 실제로 중요한가요? 아니면 조사 시간을 낭비하고 있습니까? 당신의 시간은 귀중하다는 것을 기억하십시오. 시간이 아닌 최종 사용자가 다른 것에 소비 되었습니까? =)

    +0

    아무 것도 그 단순한 형태 .. 그 요일에 따라 로컬 드라이브에서 이미지를 표시하는 그림 상자가 있습니다 .. 하지만 투명성 키를 설정하여 내 이미지 (PNGs) 투명 영역을 표시하지 않습니다 ... 그게 ... – Moon

    +0

    덕분에 문서가 도움이 ...하지만 여전히 응용 프로그램에 의해 메모리 사용률을 최적화하는 방법입니다 .. 내 실행 코드를 통해 내가 처리 할 수 ​​없습니다 ... 솔루션이 구축 될 때와 비슷한 것 ... 궁금한 점 – Moon

    +0

    당신이 우리에게 준 정보로, 그렇지 않습니다. 아마도 두 가지 중 어느 것도 필요 없다고 제안 할 것입니다.) – Rob

    2

    실행 가능한 크기와 메모리 사용량은 완전히 별개의 개념입니다. 예를 들어,이 간단한 프로그램은 다음과 같습니다.

    class Program 
    { 
        static void Main() 
        { 
         var b = new byte[int.MaxValue]; 
        } 
    } 
    

    은 4KB이지만 컴퓨터에서 사용 가능한 모든 RAM을 사용하고 충돌합니다. 이는 매우 단순한 응용 프로그램을 사용할 수 있음을 보여 주지만 실제로 수행중인 작업에 따라 많은 메모리를 소비 할 수 있습니다. 그렇다면 응용 프로그램은 무엇입니까?

    0

    프로그램의 메모리 사용량은 바이너리 또는 리소스의 크기와 100 % 관련이 없습니다.

    프로그램에 따라 다릅니다. 예를 들어 다음과 같이하면 :

    List<int> list = new List<int>(); 
    for (i=1; i<100000; i++) list.Add(i); 
    

    int의 값을 저장하는 데 필요한만큼의 메모리가 필요합니다.

    그리고 사용하는 용도에 따라 다릅니다.

    당신은 winforms로 게시물을 태그했습니다 - 나는 당신이 GUI 응용 프로그램을 가지고 있다고 가정합니다. Gui의 메모리 사용량은 사용한 컨트롤과 GUI 스타일 (예 : 애니메이션, 마우스 오버 효과 ...)

    .NET에는 런타임 중에 사용되지 않는 메모리를 확보 할 수있는 가비지 수집기가 있습니다.

    관련 문제