2010-11-26 3 views
0

정렬 및 페이징과 함께 gridview와 결합 된 업데이트 패널이 있습니다.IIS + Ajax UpdatePanel이 극단적 인 메모리 사용을 초래합니다.

나는 작업자 프로세스의 메모리 사용량 (W3WP)를 모니터링하는 작업 관리자로 이동

난 그냥 빠르게 정렬 버튼을 클릭하면됩니다 무엇. 각각

그런 다음이 더 메모리까지 해제되지 않은, 남아에서 정지 그래서 약 90 30 메가 바이트 메모리 사용에서 이동에 대한 2메가바이트

와 프로세스 증가 메모리를 클릭합니다. 캐싱 또는 세션/응용 프로그램 상태를 사용하지 않습니다.

무엇이 문제의 원인 일 수 있습니까? IIS에 mem 사용을 줄이기위한 설정이 있습니까? 그래서 다른 86 무엇을 위해 사용된다, 4메가바이트 ??? : -

나는 또한 내 응용 프로그램의 메모리 사용량을 조사하는 .NET 프로파일 러를 사용 작업 관리자에서 4MB를 다시 기록하더라도 90MB라고 말하면 나머지는 IIS에서 어떤 방식 으로든 사용해야하는 관리되지 않는 메모리라고 생각하게됩니다.

+0

BTW 이것은 단지 아약스 문제가 아닙니다. 나는 이것을 다른 웹 사이트와 함께 테스트했고 메모리도 같은 방식으로 올라 갔다. 가파른 정도는 아니었다. 요청 당 400 - 500kb라고합시다. – Tomasi

+0

A 테스트, 세션 상태 없음, 뷰 상태 없음, SQL Server 없음, xml 파일, gridview 및 updatepanel. 메모리 사용량은 20에서 70으로 줄었고 다시 돌아 가지 않습니다. http://rapidshare.com/files/433269321/ajaxtest.rar – Tomasi

+0

plz 누군가 내가 테스트 한 프로젝트를 테스트했습니다. 긴급 발급되었습니다. – Tomasi

답변

0

문제는 실제로 GridView와 관련이 있으며 UpdatePanel에는 없습니다. 해당 레코드는 ViewState에 저장되므로 모든 단일 포스트 백이 앞뒤로 전달됩니다. 또한 정렬 버튼을 빠르게 클릭하면 여러 가지 요청을 생성하여 데이터를 정렬합니다. 정렬을 구현 한 방법에 따라 각 클릭 요청별로 정렬 할 수 있도록 레코드 세트를 복제 할 수 있습니다.

단순히 ASP.NET 응용 프로그램을 호스팅하기 때문에 "메모리 사용을 줄이기"위해 IIS에 설정이 없습니다. 응용 프로그램은 자체 메모리 관련 문제를 해결해야합니다.

많은 양의 데이터를 정렬하는 것은 리소스 집약적 인 프로세스가 될 수 있습니다. 가장 좋은 방법은 클릭 한 후에 정렬 버튼을 비활성화하고 데이터 정렬이 완료되면 다시 활성화하는 것입니다.

+0

.net 프로파일 러를 사용하여 내 앱을 검사했습니다. 메모리 사용량 : 4 메가 ​​비트, 그래서 사용되는 다른 86 무엇입니까 ??? – Tomasi

+0

ViewState는 서버의 메모리를 사용하지 않습니다. ViewState를 메모리에 이동시키는 사용자 정의 ViewState 처리가 없으면 ViewState로 인해 증가 된 상수 메모리 소비가 없어야합니다. – Stilgar

+1

@ diamandiev 명시 적으로 설정하지 않는 한 GridView는 내부적으로 데이터를 ViewState에 내부적으로 저장하지만 사용자가 정렬 할 수는 없습니다. @Stilgar ViewState는 Session처럼 서버에 메모리를 유지하지 않지만 포스트 백하는 동안 ViewState는 요청과 함께 다시 전송됩니다. 요청의 ViewState에 액세스하기 위해 요청의 수명 동안 메모리에 저장됩니다. – bitxwise

0

.NET GC는 비 결정적입니다. 이것은 그것이 실행되어야한다고 결정할 때마다 실행된다는 것을 의미합니다. 예를 들어 Page_Init 이벤트에서 GC.Collect()를 명시 적으로 호출하여 메모리가 여전히 증가하는지 확인할 수 있지만 실제 앱에서 GC_Collect()를 제거하는 것이 좋습니다. 그렇지 않으면 GC가 효율적으로 작업하지 못하게됩니다.

+0

나는 당신이 제안한 것과 메모리 사용량을 절반으로 줄였습니다. 하지만 가비지 수집기가 각 요청이 끝난 후 메모리를 지우지 않는 이유는 무엇입니까? - – Tomasi

+0

GC는 항상 느껴질 때만 실행됩니다. 하지만 게시와 꼭 같으면 컬렉션을 강제 설정할 수 있습니다. – JonVD

+0

Application.EndRequest 이벤트를 처리하고 GC.Collect()를 호출하는 모듈을 만드는 것이 좋습니다. – Tomasi

관련 문제