문제

일반 우선 순위에 대한 사용자 모드 프로그램을 실행하고 있습니다. 내 프로그램은 NP 문제를 검색하고 있으며 결과적으로 많은 메모리를 사용하여 결국 스왑 파일에 있습니다.

그런 다음 마우스가 얼어 붙어 작업 관리자가 열리고 프로세스를 끝내려면 영원히 걸립니다.

내가 알고 싶은 것은 2 개의 코어 중 1 개만 사용되고 있어도 Windows 운영 체제가 완전히 잠그는 것을 막을 수있는 방법입니다.

편집 : 답변에 감사드립니다.

메모리를 덜 사용하면 도움이 될 것이지만 전체 OS가 잠겨 있어야한다는 것은 의미가 없습니다.

도움이 되었습니까?

해결책

문제는 다른 프로그램 (예 : Explorer.exe)이 실행될 때 모든 코드와 메모리가 교체되었다는 것입니다. 다른 프로그램을위한 공간을 만들려면 Windows는 먼저 프로그램이 디스크에 사용하는 데이터를 작성한 다음 다른 프로그램의 메모리를로드해야합니다. 다른 프로그램에서 실행되는 모든 새 코드 페이지에는 디스크 액세스가 필요하므로 천천히 실행됩니다.

나는 당신의 프로그램의 액세스 패턴을 잘 모르지만, 그것은 모든 메모리 페이지를 무작위로 접촉하는 것으로 생각합니다. Windows가 프로그램에서 메모리 페이지를 홍보하자마자 갑자기 문제를 악화시킵니다. 다시 필요하고 Windows는 동일한 처리를 위해 다른 페이지를 찾아야합니다.

다른 프로세스에 더 많은 RAM을 제공하려면 사용할 수 있습니다. SetProcessWorkingSetsize 프로그램에서 사용할 수있는 최대 RAM을 줄이기 위해. 물론 이것은 더 많은 교환을해야하기 때문에 프로그램이 더 느리게 실행됩니다.

시도 할 수있는 또 다른 대안은 시스템에 더 많은 드라이브를 추가하고 스왑 파일을 해당 스왑 파일에 배포하는 것입니다. 듀얼 코어 CPU가있을 수 있지만 단일 드라이브 만 있습니다. 여러 드라이브에 스왑 파일을 배포하면 Windows가 작업의 균형을 맞출 수 있습니다 (이것이 얼마나 잘 수행되는지에 대한 직접적인 경험은 없지만).

다른 팁

명백한 대답은 "메모리를 적게 사용"하는 것입니다. 앱이 사용 가능한 모든 메모리를 사용하면 OS는 앱의 공간을 만들기 위해 작업 관리자 (등)를 페이지에서 페이지를 페이지에 넣어야합니다. 프로그램을 전환 할 때 OS는 다른 프로그램을 다시 페이지로 가져와야합니다 (필요한대로). 디스크 읽기는 메모리 읽기보다 느리기 때문에 모든 것이 느려지는 것처럼 보입니다.

이를 피하려면 앱이 자체 메모리를 관리하거나 무차별 인력보다 더 나은 알고리즘을 사용하도록하십시오. (유전자 알고리즘, 시뮬레이션 된 어닐링 등이 있습니다)

이 질문에 대한 프로그래밍 답변이 있다고 생각하지 않습니다. 스왑 파일 문제는 특히 IDE HDD 또는 고도로 조각난 스왑 파일을 사용하는 경우 디스크에 액세스하는 병목 현상으로 인한 것 같습니다.

약간 극단적이지만, 항상 스왑 파일을 최소화 할 수 있으므로 디스크 ashing이 모두 없어지고 프로그램이 많은 가상 메모리를 할당 할 수 없습니다. 제어판 / 고급 / 고급 탭 / perfromance / 가상 메모리에서 페이지 파일을 사용자 정의 크기로 설정하고 2MB 값 (XP에서 가장 작은 허용)을 입력하십시오. 할당이 실패하면 예외를 얻고 우아하게 빠져 나갈 수 있어야합니다. 그것은 당신의 문제를 해결하지 않고 단지 속도를 높입니다.)

고려해야 할 또 다른 것은 당신이 ona 32 비트 플랫폼이고, 64 비트 시스템으로 포트하고 훨씬 더 많은 주소가 달린 RAM이있는 상자를 얻는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top