У меня есть последовательность SQL-запросов, которые приводят к очень большим наборам данных, которые я должен запросить в базе данных и записать их в файлы. У меня около 80 запросов, и каждый из них производит от 1000 до 1000000 записей. Я не могу изменить сами запросы. Я пытаюсь читать 500 000 записей за раз для каждого запроса и записывать в файл. Вот что у меня пока
void WriteXml(string tableName, string queryString)
{
int pageSize = 500000;
int currentIndex = 0;
using (
SqlConnection connection =
new SqlConnection(CONNECTION_STRING))
{
using (SqlCommand command = new SqlCommand(queryString, connection))
{
try
{
connection.Open();
SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
int rowsRead = 0, count = 0, index = 0;
do
{
DataSet dataSet = new DataSet("SomeDatasetName");
rowsRead = dataAdapter.Fill(dataSet, currentIndex, pageSize, tableName);
currentIndex += rowsRead;
if (dataSet.Tables.Count > 0 && rowsRead > 0)
{
dataSet.Tables[0].WriteXml(string.Format(@"OutputXml\{0}_{1}.xml", tableName, index++),
XmlWriteMode.WriteSchema);
}
}
while (rowsRead > 0);
}
catch (Exception e)
{
Log(e);
}
}
}
}
Это работает, но очень-очень медленно. Я почти уверен, что делаю что-то не так здесь, потому что, когда я запускаю это, приложение забирает большую часть моей памяти (у меня есть 6 ГБ), и это требует вечной работы. Я начал его прошлой ночью, и он все еще работает. Я понимаю, что имею дело со многими записями, но не думаю, что это заняло бы столько часов.
Является ли это правильным способом считывания постраничных / сегментированных данных из базы данных? Есть ли способ, которым этот метод может быть оптимизирован или есть другой способ, которым я могу подойти к этому?
Дайте мне знать, если мне что-то не ясно, и я постараюсь дать разъяснения.