SQL Server 데이터베이스가 있고 ADO.NET ExecuteReader를 사용하여 데이터 배열을 가져 왔습니다. 내 스토어드 프로 시저는 약 35,000 개의 레코드를 반환합니다. 정말 이상한 DataReader 성능 문제
이가 ExecuteReader를 호출하면 DataReader가를 반환하는 약 3 초하고있다.나는이 항목과 비슷한 코드를 사용하고 있습니다.
using(var conn = new SqlConnection(MySQLHelper.ConnectionString)) {
conn.Open();
var sqlCommand = SqlHelper.CreateCommand(conn, "spGetItems");
using (var dr = sqlCommand.ExecuteReader()) {
while(dr.read){
var item = new Item{ID = dr.GetInt32(0), ItemName = dr.GetString(1)};
items.Add(item);
}
}
}
(가) 읽기의 대부분은 0 밀리 초를하고있다. 그러나, 간헐적으로 약 5.5 초 (5000 + 밀리 초) 소요되는 읽기 있어요. 나는 데이터를 보았고 평범함을 찾을 수 없었다. 나는 오랫동안 복용했던 기록의 빈도를 살펴보기 시작했다.
재미있었습니다. 완전히 일치하지는 않지만 그들은 가깝습니다. 다음과 같이 하였다로드하는 데 시간이 오래 복용 하였다 기록 ...
기록 #S : 29, 26,26,27,27,29,302827273030,26, (26) (30)에 기록이 몇 밀리 초에 0에서 읽을 것이며, 다음 5 초, 예상대로 그 다음 26 ~ 30 레코드를 다시 읽을 것입니다 걸릴 것 같은 27
그래서 그것은 본다.
나는 완전히 손실되었습니다. 더 많은 코드를 게시 할 수 있지만 그다지 많은 코드는 없습니다. 그것은 아주 간단한 코드입니다.
EDIT 아니요, 내 필드에 varchar (최대) 또는 그 이상인 사람이 없습니다. 나의 가장 큰 분야는 숫자 (28,12)입니다.
저장 프로 시저를 수정 한 후에 더 이상 문제가 없습니다. 먼저 Top 100을 선택하도록 수정 한 다음 Top 1000으로, 그 다음 10,000으로, 그리고 나서 100,000으로 올렸습니다. 나는 그것들에 결코 문제가 없었다. 그런 다음 TOP로 이동했는데 이전에는 문제가 없었습니다. 클라이언트로 전송
100 개 항목 만 반환하도록 저장 프로 시저를 수정하면 정상적으로 실행됩니다. 나는이 양을 늘려 성능이 크게 떨어지는 숫자가 있는지 알아볼 것입니다. –