ASP.NET과 DevExpress ASPxGridView 구성 요소를 사용하는 여러 프로젝트가 있습니다. 이 프로젝트의 개발 과정에서 데이터 바인딩에 대한 몇 가지 기술이 사용되었으며 이제이 프로젝트 중 일부가 서버의 모든 메모리를 차지하는 것으로 나타났습니다.ASP.NET 메모리 관리 기법
원래 우리는 저장 프로 시저를 호출하고 DataSet을 gridview에 바인딩했지만 DX 권장 사항에서는이를 ObjectDataSource로 수정하고 DB에 대해 Linq 문을 궁극적으로 사용하는 개체 및 개체를 만들고이를 반환합니다. 바인드되는 객체의 일반적인리스트.
불행히도이 문제는 현재 해결되지 않습니다. 우리는 여전히 많은 양의 메모리를 먹어 치우는 것을 눈치 채고 있습니다. 그리고 나는 이것의 바닥에 도달하려고 노력하고 있습니다. RedGate 메모리 프로파일 러를 실행할 때마다 그리드에 리 바인드 할 때마다 문자열, RuntimeTypeHandles 및 인스턴스의 인스턴스가 많이 생성됩니다.
DataBind는 페이지로드시에 수행되고 그리드는 정렬시 포스트 백을 사용하지만 모든 바인드에서 MBs 메모리 누수가 발생하므로 어떤 기술을 사용할 수 있는지/객체 관리에 대한 모범 사례가 궁금합니다. 우리가 통제 할 수있어? 데이터 객체에 IDisposable을 구현하고 linq 컨텍스트를 삭제하고 다른 객체를 null로 설정했지만 차이가없는 것 같습니다. 나는 모든 호출에서 데이터 객체의 인스턴스를 만드는 것처럼 보이고 심지어 dispose를 호출해도 아무런 차이가 없다.
'누출'이라고 설명하십시오. 그 물체는 여전히 어떤 방식으로 도달 할 수 있습니까? 그렇지 않은 경우 GC에서 많은 양의 할당과로드가 누출되는 경우는 아닙니다. '# GC 컬렉션'에 대한 프로필을 작성 했습니까? –
메가 바이트? 그건 몇 가지 표 ... 당신은 페이징을 제대로 사용하고 있습니까? 'LinqDataSource'를 사용하는 것이 쉽습니다. – Thorarin
메모리 부족 예외 또는 다른 유형의 메모리 문제가 있습니까? 페이지를 백 또는 수천 번 실행하면 결국 메모리가 맨 위에 나오지 않거나 "나쁜 물건"이 발생합니까? 다른 말로하면, 메모리 사용이 정말로 해로운가요 아니면 그냥 정상입니까? ASPxGridViews를 사용하고 실제로이 문제가 없습니다. – Greg