이 질문은 다소 my previous one 대답 관련이있다. Generic.List가이 시점에서 더 많은 요소 (예 : 2^19에서 다음^2^20까지)를 수용 할 수 있도록 용량을 변경하면 SqlDataReader가 종료되고 Read 메서드는 더 이상 레코드가없는 것처럼 False를 반환합니다..SqlDataReader.ReadColumnHeader NullReferenceException이
대부분의 경우 조용히 종료되지만 예외는 전혀 발생하지 않습니다. 그러나 때때로 나는 얻을 것 :
NullReferenceException이 { "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."} System.Data.SqlClient.SqlDataReader.ReadColumnHeader에서
(INT32 난을) System.Data.SqlClient.SqlDataReader.GetInt32에서 System.Data.SqlClient.SqlDataReader.ReadColumn (INT32 전, 부울 에서는 setTimeout) (INT32 전)
나는 모든 레코드가 반환하는 사실을 알고에서
다시 저장 프로 시저 사용 ader (단일 열)는 정수 값입니다. 행 m_aFullIDList.Add
을 제거하고 간단히 정수 값으로 값을 읽거나 일반 목록 용량을 알고있는 많은 수로 미리 할당 한 경우 -이 문제는 발생하지 않습니다. 분명히 List가 용량을 재 할당 할 때만 발생합니다. 이는 독자에게 영향을줍니다.
또한이 구조체의 용량이 특정 지점을 초과하여 재 할당되는 즉시 다른 구조체 (ArrayList, 심지어 Array, Array.Resize 사용)를 사용하려고 시도했습니다. 이로 인해 SqlDataReader가 손상됩니다.
이 ASP.NET 프로젝트는 다소 복잡하므로 독자를 실행하고 목록으로 읽는 독립 실행 형 프로젝트에서이 문제를 다시 만들려고 할 때 문제가 발생하지 않습니다. 어떤 일이 벌어지고 있으며 이것이 어떻게 수정 될 수 있는지 생각해보십시오.
나는 두 가지 증상 중 하나가 발생하고 있다고 확신합니다. 앱 도메인에 메모리가 부족합니다 ** 또는 ** 리더가 시간 제한을 초과했습니다. –
@neoistheone 신속한 응답에 감사드립니다. 나는 이것에 대해 생각했지만, 연결과 명령 타임 아웃은 SP가 실행하는 것보다 더 큰 값으로 설정된다. (나는 다른 타임 아웃을 놓치고 있는가?) 그리고 나는 많은 기억을 가지고있는 것처럼 보인다 (또한 용량의 사전 할당이 효과가있는 것처럼 보인다) –