2012-01-25 2 views
4

나는 내 자신의 배경 화면 체인저 프로그램을 만드는 즐거움을 누리고 있습니다. 나는 인터넷에 많은 것들이 있다는 것을 알고 있지만, 나는 단순히 새로운 것을 배우려고하고있다. 그래서 지금까지 간단한 프로그램을 만들 때마다 RAM/Memory를 신경 쓰지 않았습니다. 저는 학교에서 주로 프로그램을 만들고 있었고, 한 번 사용한 프로그램과 같았습니다. 그리고 나서 잊어 버리고있었습니다.변수로 찍은 메모리 해제

하지만 지금은 응용 프로그램을 만들고 싶습니다. 사용하고 싶습니다. 내 프로그램이 "alt + ctrl + del"창에서 약 4000k 걸리는 것으로 나타 났으며, 벽지가 바뀌고 때로는 내려 가고 때로는 최대 200,000k가 걸리고 때로는 다른 곳으로 바꿀 때까지 높게 유지됩니다. Memorytaken

그래서 여기에 질문, 실행하는 동안 최소한의 램을 내 응용 프로그램 사용을 위해 팁 무엇 온다 (트레이 아이콘을 메인 창 if (FormWindowState.Minimized == WindowState) Hide(); 사용 숨겨져)

가 메모리를 복용하는 함수 내부의 변수인가? 예

int function(int a){ 
int b = 0; 
int c = a+b; 
return c; 
} 

또는 함수가 일부 값을 반환 한 후에 이러한 변수가 해제 되었습니까?

기사에 대한 정보를 얻을 수있는 도움말, 가이드 및/또는 링크를 사용할 수 있습니다. 초보자 친화적 인 tho.

EDIT : 좋아, 내가 읽었던 부분은 비트 맵을 처리하기 위해 내가 사용했던 내 전역 변수 중 하나를 제거했다. 그리고 그것의 꾸준한 4000-7000k에있다. 배경 화면을 바꿀 때 조금 올리면됩니다. 그런 다음 다시 낮추십시오. 그래서 나는 나를 위해 그게 성공한 것 같아. 한 가지 더 남았습니다. 좀 크고/크고/많은 옵션 프로그램을 다운로드하여 월페이퍼를 변경하고, 광산보다 더 많은 옵션이 있고, 여전히 약 1000-2000k가 걸리므로, 지금 광산에서 "많은"램을 가져갈 수있는 것을 지금 읽으십시오. 바로 제가 4100에 대한 내 프로그램을 실행할 때, 그래서 나는 여전히 그것을 최적화하기 위해 뭔가를 할 수 있다고 생각합니다. 답변 해 주셔서 감사합니다. :)

+2

메서드가 반환 될 때 스택이 해제 될 때 스택의 로컬 변수에 대한 메모리 공간이 회수되므로 해당 시점에 힙의 로컬 변수 참조가 가비지 수집 대상이됩니다. 나는 "C# 가비지 콜렉션 관리"를 시작점으로 삼았다. – BrokenGlass

+0

참고로 'Visual Studio C#'과 같은 제목을 제목 앞에 붙이지 마십시오. 그것이 바로 태그가있는 것입니다. –

+0

up : Roger that. 죄송합니다, 다시는하지 마십시오. BrokenGlass : 고마워요, 그것에 대해 좀 읽어 보겠습니다. – Kedor

답변

4

프로그램의 관점에서 볼 때 메모리는 원하는 경우 두 블록으로 나뉩니다. 스택과 힙.

스택은 현재 실행중인 프레임 (예 : 현재 실행중인 함수)을 나타내며 함수 매개 변수, 반환 값을 전달하는 데 사용되며 일반적으로 지역 변수가 저장됩니다. 이 메모리는 현재 실행 프레임이 끝날 때 (예 : 함수가 종료 될 때) 제거됩니다.

힙은 장기간 객체를 만들고 저장할 수있는 메모리 풀을 나타냅니다. 일반적으로 "new"연산자를 사용하여 생성 된 모든 것은 힙에 저장되며 스택에있는 참조는 로컬 컨텍스트에 사용됩니다. 할당 된 객체에 대한 참조가 사용되지 않으면 나중에 가비지 수집기가 지정되지 않은 시간에 실행되어 메모리를 해제 할 때까지 해당 메모리가 유지됩니다. GC가 실행될 때 보장 할 수 없습니다 - 프로그램이 메모리가 부족한 경우 나 예약 된 간격 등이있을 수 있습니다.

메모리 동작에서 관찰하고있는 것처럼 스파이크는 리소스를 열거 나로드하는 것이므로 GC가 실행 된 후 골짜기가 있습니다. 이것을 관찰하는 또 다른 방법은 UI가 화면에 나타나고 프로그램이 최소화 될 때 프로그램의 메모리 사용량을 살펴 보는 것입니다. 모든 그래픽 요소가 더 이상 필요하지 않으므로 최소화하면 메모리 사용 공간이 줄어들 것입니다. UI를 최대화하고 다시 그릴 때 메모리 사용량이 최고가됩니다.

당신은 스택과 힙의 더 나은 이해를 위해 다음과 같은 기사를 볼 수 있습니다 :

C# Stack and Heap

What are stack and heap?

또한 쓰레기 수거에보고 할 수 있습니다 :

Garbage collection article on MSDN

... 및 Value vs Reference types

1

로컬로 선언 된 변수에 대해 취해진 메모리가 자동으로 해제됩니다.

함수 외부에서 계속 유지 될 변수에 대해 취해진 메모리는 더 이상 사용되지 않을 때 GarbageCollector (GC)라고하는 항목에 의해 해제됩니다.

걱정하지 마세요. 예제 함수를 사용하여 메모리 누수가 발생하지 않습니다.

200,000l을 어디에서 다 써 버릴 지 알려주지 마십시오. 도움이 될 수있는 프로파일 러가 있습니다 (권장 사항은 없지만 Google에서 먼저 제공됩니다 :)

+0

실제로 예제 함수는 아마도 지터에 의해 최적화되어있을 것입니다. – phoog