У меня есть база данных с большим количеством записей с отметкой даты / времени. Мне нужно просмотреть эти записи (в хронологическом порядке) и проанализировать их.
База данных слишком велика, чтобы загружать каждую запись одновременно, поэтому я подумал о том, чтобы загружать по несколько недель / дней / часов / и т. Д. Одновременно. Проблема в том, что независимо от того, что я пробовал, база данных (SQL Server) просто использует всю память на моем компьютере. Даже после закрытия приложения sqlservr.exe
все еще использует всю мою память. Обычно он использует около 1,8 ГБ памяти, независимо от того, содержат ли мои «партии» только 10 записей или 1 000 000.
Вопрос заключается в следующем: как я могу запросить базу данных, чтобы получить «партии» записей за раз, без использования базой данных каждого бита памяти?
Я использую библиотеки System.Data.SqlClient
. Вот немного псевдокода:
String file = "C:\\db.mdf";
String connString = @"Data Source=.\SQLExpress;AttachDbFilename="C:\db.mdf";Integrated Security=True;User Instance=True";
SqlConnection conn = new SqlConnection(connString);
conn.Open();
DateTime start = DateTime.MinValue;
DateTime end = DateTime.MaxValue;
while()
{
// This should query for 1 hour at a time (but I should be able to change the time interval)
// I would like for the memory usage to be proportional to the time interval
String query = "SELECT * From MyTable WHERE Date BETWEEN '" + start.ToString() + "' AND '" + end.ToString() + "'";
SqlCommand cmd = new SqlCommand(query, conn);
SqlDataReader reader = command.ExecuteReader();
while(reader.Read())
ProcessRecord(ref reader);
start = end;
end = end.AddHours(1);
}
conn.Close();
C #
.NET 3.5
SQL Server 2008
Спасибо.