2010-07-29 2 views
2

w3wp.exe에서 손실 된 메모리를 복구 할 수 있습니까? 나는 session.abandon()이 그런 자원을 정리해야한다고 생각 했단 말인가? 것은 내가 웹 응용 프로그램을 가지고 특정 페이지 w3wp.exe 크게 성장하게합니다. 40MB ~ 400MB와 같습니다. 이제는 코드를 최적화하기 위해 코드를 최적화하려고합니다. 그러나 w3wp.exe의 크기가 커지면 사용자가 로그 아웃하고 브라우저를 닫은 경우에도 손실 된 메모리를 복구 할 방법이 없습니까?w3wp.exe에서 메모리를 복구

나는이 작업자 프로세스가 유휴 사용 후 30 분 (기본값) 동안 재활용 될 것이라는 것을 알고 있지만 오랜 시간 동안 유휴 사용 기간이없고 작업자 프로세스가 여전히 그 부분의 메모리를 가지고 있으면 계속 유지합니다 성장? 어떤 생각 사람?

+0

이전 세션을 닫은 후에 새 세션을 시작할 때 서비스의 메모리 사용 공간이 커지는 것을보고 있습니까? – Achilles

+0

예. 내 w3wp.exe는 특정 페이지에서 400MB로 이동하며 사용자가 로그 아웃 (session.abandon()) 한 후에도 다음 사용자가 방문하여 해당 페이지를 방문하고 w3wp.exe가 700MB로 이동합니다. – xeshu

+0

세션에서 엄청난 양의 데이터를 처리하고있는 것처럼 보입니다. 대신 파일이나 데이터베이스를 사용하여 많은 양의 데이터를 저장하십시오. –

답변

0

가비지 수집기는 모든 메모리를 해제해야합니다. 일을 올바르게 처리해야합니다. Session.Abandon()을 호출 할 때마다 GC가 즉시 시작되지 않습니다. 주요 실적이 타격을 입었습니다.

즉, 모든 응용 프로그램은 "정상적인"메모리 사용, 즉 안정적인 메모리 사용 (다시 말하면 누출이없는 경우)이며,이 수치는 모든 응용 프로그램마다 다릅니다. 400MB는 앱이하는 일에 따라 많을 수도 있고 아무 것도 아닐 수도 있습니다. 나는 400MB 주위에 떠 다니는 응용 프로그램과 1.5GB 주위의 다른 응용 프로그램을 가지고 있으며, 메모리 사용이 안정화되는 한 괜찮습니다. 당신은 무한한 메모리 사용량을 볼 경우 어딘가에 귀하의 애플 리케이션 어딘가에 누수 가능성이 높습니다.

또한 in-proc 세션에서 많은 양의 데이터를 저장하면 메모리 사용량을 빠르게 높일 수 있습니다. 대신 파일이나 데이터베이스를 사용하여이 데이터를 저장하십시오.

+0

기본적으로, 나는 어떤 물건도 처분하지 않는다. 나는 C#의 'using'부분이 처리 사업을 처리해야한다고 생각 했습니까? 네, 프로덕션 배포에서는 session.abandon()을 수행하지 않습니다. 나는 그것을 깨닫고 코드에 넣을 것이지만, 99.9 %의 사용자가 정말로 로그 아웃 버튼을 누르지 않아도되고, 단순히 브라우저를 닫을 뿐이므로 많이 사용하지 않을 수도 있습니다. – xeshu

0

메모리가 누출되지 않으면 메모리 관리자가이 메모리를 다시 사용하므로 프로세스 메모리가 계속 증가하지 않아야합니다.

+0

hmmm 재사용, 이제 이것은 흥미로운 개념입니다 ... – xeshu