2011-08-24 4 views
0

약 300MB 크기의 C# .NET 응용 프로그램이 있습니다.300MB의 메모리 공간이 부족합니까?

내 질문 :

  1. 당신이 응용 프로그램의 메모리 사용량을 모니터링합니까?
  2. 300MB의 공간이 부족합니까?
  3. 가이드 라인이 있습니까?
+3

응용 프로그램이 기대하는 바가 아니라면 "나빠"뿐입니다. 300MB의 공간을 과도하게 차지할 것으로 예상되는 이유가 있습니까? – razlebe

+0

아무 이유없이, 그냥 궁금해서 메모리 발자국을 초과하는 것이 나쁘다 ... – bstack

+1

OK, thanks. 저의 요점은 "과도한"은 기대와 관련이 있다는 것입니다. 프로그램이 299MB 파일을 열고 읽는 경우 300MB의 공간이 지나치게 많지 않습니다. 당신의 프로그램이 "Hello World"라면, 아마도 그렇습니다. 조금 더 많은 정보가 없으면 그것이 과도한 것인지에 관해 조언하는 것은 불가능합니다. 최선의 조언은 이미 아래에 제공된 것인데, 이는 (a) 300MB의 메모리를 확보 할 수 없거나 (b) 메모리 누수를 나타내는 발자국이 증가하는 경우에만 문제가된다는 것입니다. – razlebe

답변

2

짧은 답변 :

우리는 한 번 우리의 타사 컨트롤 중 하나가 버그로 인해 발생 꽤 심각한되기 위하여 계속 WPF 응용 프로그램의 메모리 사용을 모니터링했다.

. NET에서 관리되는 프레임 워크를 제공하기 때문에 걱정할 필요가없는 한 메모리에 대해 걱정하지 않는 것이 지침 일뿐입니다. GC는 꽤 잘 처리 할 수 ​​있으며 여전히 메모리가 남아있는 한 사용하지 않는 것이 좋습니다.

언제 그렇게 될까요? 메모리 예외를 벗어나면 걱정을 시작할 필요가있을 수 있습니다. 나는 개인적으로 그것이 일어나는 것을 결코 보지 못했다.

1

가장 중요한 것은 시간이지나면서 커지지 않는다는 것입니다. 이것을 제대로 수행하려면 가끔 강제로 가비지 콜렉션을 수행하는 것이 좋으며, 메모리 사용량이 적을 것으로 예상되는 시점에 수행하는 것이 바람직합니다.

우리 GUI 응용 프로그램에서는 세션이 닫힐 때마다 10 분마다이를 수행합니다. 사람들이 릴리스 앱에서 GC를 강제 실행하는 것을 반대한다면, 이것을 디버그 빌드 전용 기능으로 만들 수 있습니다.

+0

메모리 풋 프린트가 증가하지 않아서 가비지 수집을 강제 할 필요가 없습니다. 나는 단지 300MB의 momory footprint가 아마도 너무 클 것이라고 걱정하고 있습니까? – bstack

+0

@bstack : 256MB 메모리가있는 컴퓨터에는 너무 큽니다. 우리의 응용 프로그램은 20-ish dll과 함께 시작한 후 250MB를 필요로합니다. 이것은 결코 나를 걱정하지 않았다. 이것의 대부분은 excecutable 및 CLR 오버 헤드입니다. 관리되는 힙은 거의 비어 있습니다. ".NET Clr 메모리"범주의 카운터를 사용하여 perfmon을 사용하여이를 확인할 수 있습니다. –

1

메모리가 일정 기간 동안 성장하면 난 단지 걱정 것이다 - 당신이 경우

을 (How to test a WPF user interface? 참조)는 메모리 누수를 노출하기 위해 또 다시 작업을 반복하는 자동화 된 테스트를 사용해야 할 수 있습니다 정말로 내가 메모리 프로파일 러 (예 : Redgate ANTS Profiler)를 사용하거나 무료 시험을 원할 경우 걱정할 것입니다. CLRProfiler4; 후자는 사용하기가 힘들지만 인내심으로 메모리 누출을 발견하게됩니다.

+0

우리는 메모리 누수가 없으며, 300MB의 메모리가 너무 큽니다. – bstack

+0

메모리 프로파일 러를 사용하여 메모리가 할당 된 위치를 확인할 수도 있습니다. –

2

대개 정적 메모리 풋 프린트는 대상 컴퓨터에서 문제를 일으키지 않는 한 문제가되지 않지만 큰 문제는 아닙니다. 메모리의 실제 문제는 메모리 누수가 발생하여 메모리가 증가하는 경우입니다.

내가 결코 신경 쓰지 않는 이유는 특정 응용 프로그램에 대해 좋은 또는 나쁜 메모리 공간이 무엇인지 전혀 알지 못하기 때문입니다. 메모리에 집중하는 것보다 코드 내의 문제를 식별하는 더 나은 방법이 있다고 생각합니다. 간단히 말하자면, 코드가 잘 작성되어 있고 불필요한 참조를 제거했다면 메모리 사용 공간이 옳을 것입니다.

+0

우리는 메모리 누수가 없으며, 300MB의 메모리가 너무 큽니다. – bstack

+0

200MB 만 있으면 사용할 수 있습니다. 반면에 2GB를 사용할 수 있다면 그렇지 않습니다. – UrbanEsc

관련 문제