2010-03-18 2 views
1

필자가 작성한 응용 프로그램에서는 메모리 컨테이너 (C++ 표준 컨테이너가 많이 사용되지만 관련이 있다고 생각하지 않음)를 많이 사용합니다.단기간의 높은 VM 메모리 사용 효과 (Windows)

내 응용 프로그램의 "작업"중에 과도한 사용량 인 경우 개인 바이트 메모리 사용량이 1GB에 도달합니다.

이 컨텍스트는 약간의 컨텍스트와 마찬가지로 100,000 개의 파일과 관련된 사용자 시작 작업입니다. 사용자가이 작업을 시작한 다음 컴퓨터를 계속 실행합니다.

(내가 메모리로로드 파일과 같은 바보 아무것도하지 아니오 -이 공간은 진행중인 작업과 관련된 모든 메타 데이터입니다).

는 대부분의 사용자의 경우이 작업하는 동안 메모리 사용량은 무시할 - 그것은 50 "일이"5000 "일"의 insted하고 싶은 사용자의 단지 1 %입니다.

필자는 메모리 내 내용을 어떻게 든 디스크로 옮기는 과정을 시작했습니다. 스크래치 파일, 임베디드 DB. ". 분에 걸어 이러한 모든 솔루션은 기본적으로 디스크에 메모리를 캐시되는 가상 메모리가 무엇인지되지 않습니다.?"-

그러나 나는 생각했다.

나는이 데이터를 지속에 관심이 아니에요 - 그것은 순전히 내가 작업이 실행되는 동안에 액세스 할 필요가/일시 물건에 흠집이 있어요.

제 질문은 무엇을해야합니까?

은 그 1 %에 대한 주요 리팩토링을하고 싶지 않아,하지만 난 그 높은 메모리 풋 프린트와 응용 프로그램을 실행의 영향을 알고 싶어요.

어쨌든 Windows VM 관리자보다 훨씬 잘 할 수 없다고 말하는 것이 맞습니까?

이것은 어떤 조건에서 유해합니까? 그래, 그래, 만약 내가 진짜 메모리를 모두 다 써 버리면 페이지를 새로 고침하는 것이 엉망이 될 것이다. 그러나 어쨌든 나는 그것을 가지고 있지 않을까? 내장 데이터베이스?

건배,

답변

2

예, 메모리 관리자는 당신을 위해 일을 할 것입니다. 부작용이 없어도 RAM에서 다른 프로세스가 매핑하여 제공하는 페이지를 제거합니다. 이 다른 프로세스는 이것으로 인해 속도가 느려지므로 스왑 아웃 된 페이지에 액세스 할 때 페이지 폴트가 발생합니다.

여기서 균형 잡힌 행동은 다른 프로세스가 짧은 절충을하지 못하게하는 데 앱이 "중요"한지 여부입니다. 일반적으로 워크 스테이션에서 예, 서버에서 울리는 No입니다.

관련 문제