Перебор больших коллекций на языке C #:Занимает очень много времени

Недавно я запустил приложение WPF. Я подключил это к базе данных BaseX (XML -на основе )и получил из нее около миллиона записей. Я хотел перебрать записи, вычислить что-то для каждой записи, а затем записать это обратно в базу данных:

IEnumerable<Result> resultSet = baseXClient.Query("...", "database");
foreach (Result result in resultSet) 
{
   ...
}

Проблема :Внутренняя часть foreach никогда не достигается. метод Query ()возвращает результат довольно быстро, но когда достигается foreach C #, кажется, ЧТО-ТО делает с коллекцией, код не продолжается очень-очень долго (не менее 10 минут, никогда не позволяйте этому бежать дальше ). Что тут происходит? Я попытался ограничить количество извлеченных элементов. При получении 100 000 результатов происходит то же самое, но код продолжается примерно через 10 -20 секунд. При получении полного миллиона результатов C #, кажется, застрял навсегда...

Любые идеи? привет

Изменить :Почему это происходит Как некоторые из вас отметили,причина такого поведения, по-видимому, заключается в том, что запрос фактически оценивается только тогда, когда вызывается MoveNext()в Enumerator внутри Enumerable. Моя база данных, похоже, не может возвращать одно значение за раз, а вместо этого возвращает сразу весь миллион наборов данных. Я попытаюсь переключиться на другую базу данных (Apache Lucene, если это возможно, так как она имеет хорошую поддержку полнотекстового поиска ), и отредактирую этот пост, чтобы сообщить вам, изменилось ли что-нибудь.
PS :Да, я в курсе, что миллион результатов - это много. Это не предназначено для живого использования, это всего лишь шаг для подготовки данных. Хотя я не ожидал, что код запустится через несколько секунд, я все же был удивлен, увидев ТАКОЕ низкое быстродействие в базе данных.

Изменить :Решение Итак, я перенес базу данных XML в Apache Lucine. Работает как шарм! Конечно, Lucine — это текстовая -база данных, которая подходит не для всех случаев использования, но для меня она творила чудеса. Может перебирать более миллиона записей за несколько секунд, извлекается одна запись за цикл -работает очень хорошо!

5
задан Kara 15 January 2014 в 02:22
поделиться