1

나는 과도한 양의 메모리를 사용하는 경향이있는 어플리케이션에서 작업하고 있으므로 이것을 줄이고 싶습니다.

나는 이것이 자바 프로그램에서 가능하다는 것을 알고있다.Maximum heap sizeJava 프로그램 시작시 매개 변수 (예 :java.exe ... -Xmx4g),하지만 여기서는 Windows-10 시스템에서 실행 파일을 다루므로 적용 할 수 없습니다.

이 게시물의 제목은 다음을 참조합니다.이 URL,이 방법을 언급하지만, 또한 상태 :

최대 작업 집합.프로세스에 할당 된 최대 작업 세트 수를 나타냅니다. 하나,이 번호는 Windows에서 무시됩니다.리소스 관리 응용 프로그램에서 프로세스에 대한 하드 제한이 구성되어 있지 않은 한

한편 다음 코드 줄은 실제로 내 프로그램의 메모리 사용에 아무런 영향을 미치지 않는다는 것을 확인할 수 있습니다.

HANDLE h_jobObject = CreateJobObject(NULL, L"Jobobject");
if (!AssignProcessToJobObject(h_jobObject, OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId())))
{
    throw "COULD NOT ASSIGN SELF TO JOB OBJECT!:";
}
JOBOBJECT_EXTENDED_LIMIT_INFORMATION tagJobBase = { 0 };
tagJobBase.BasicLimitInformation.MaximumWorkingSetSize = 1; // far too small, just to see what happens

BOOL bSuc = SetInformationJobObject(h_jobObject, JobObjectExtendedLimitInformation, (LPVOID)&tagJobBase, sizeof(tagJobBase));

=>bSuc~이다.true, 아니면 내가 기대해야 할 것이 있습니까?

이뿐 만 아니라 위에서 언급 한 도구 (Hyper-V와 같은 리소스 관리 응용 프로그램)가 Windows-10 시스템에서 작동하지 않는 것 같습니다.

다음으로이 주제에 대한 또 다른 게시물이있는 것 같습니다."C ++에서 프로세스의 WorkingSet을 1GB로 강제 설정할 수있는 방법이 있습니까?", 그러나 여기에 결과는 역시 부정적인 것처럼 보입니다.

좋은 이해를 위해서 : 저는 C ++로 작업하고 있습니다.이 URL해당 사항 없음.

그래서 지금은 간단한 질문이 붙어 있습니다 : Windows-10에서 실행되는 현재 프로세스의 메모리 사용을 제한하기 위해 C ++에서 구현 가능한 방법이 있습니까?

아무도 아이디어가 있니?

미리 감사드립니다.


  • 증상을 해결하는 대신 문제의 원인을 수정하는 것이 더 좋을까요? - user463035818
  • " 과도한 양의 메모리를 사용하는 경향이있는 애플리케이션에서 작업하고 있으므로이를 줄이려고합니다. " - 적은 메모리를 사용하십시오. 다른 방법을 사용하면 응용 프로그램이 메모리를 할당하지 못하게되고 (아마도 잠시 후 죽어 갈 가능성이 있습니다), 이는 아마도 원하는 바가 아닐 것입니다. - UKMonkey
  • 첫 번째 의견에 응답 : 프로세스가 멀티 스레드이며 처리 대기열입니다. 메모리 사용량이 너무 커지면 스레드는 메모리 사용량이 다시 합리적으로 될 때까지 대기열을 처리하기 위해 약간 기다릴 수도 있습니다. - Dominique
  • 아니요. OS / C ++ 옵션으로 메모리를 제한하면 프로그램이 메모리 부족 예외로 인해 작동을 멈추게됩니다. @ user463035818에서 기본 문제를 해결해야한다고 말합니다. - Richard Critten
  • 쓰레드는 사용 가능한 메모리를 기반으로 대기를 결정하지 않습니다. 메모리가 충분하지 않거나 메모리가 부족하여 대기열을 처리하기 위해 대기중인 스레드보다 심각한 문제가 발생할 수 있습니다. - user463035818

연결된 질문


관련된 질문

최근 질문