Я признаю, что не могу хранить свои полные данные в памяти, поэтому я хочу передавать части в память и работать с ними, а затем записывать их обратно.Есть ли что-то вроде «противоположности» урожая?
Выход очень полезно ключевое слово, оно сохраняет всю кучу, используя перечислитель и сохранение индекса, ....
Но когда я хочу, чтобы переместить IEnumerable
через выход вокруг и записать их обратно в коллекцию/file Мне нужно использовать концепцию перечислителя или есть что-то подобное, как противоположность доходности? Я возглавляю RX, но я не понимаю, решает ли он мою проблему?
public static IEnumerable<string> ReadFile()
{
string line;
var reader = new System.IO.StreamReader(@"c:\\temp\\test.txt");
while ((line = reader.ReadLine()) != null)
{
yield return line;
}
reader.Close();
}
public static void StreamFile()
{
foreach (string line in ReadFile())
{
WriteFile(line);
}
}
public static void WriteFile(string line)
{
// how to save the state, of observe an collection/stream???
var writer = new System.IO.StreamWriter("c:\\temp\\test.txt");
writer.WriteLine(line);
writer.Close();
}
Вы можете уточнить ваш вопрос немного больше? Что вы подразумеваете под «shift' IEnumerables' вокруг »? 'IEnumerable' lazy оценен, что означает, что метод даже не начнет выполнение, пока вы не начнете его итерацию. –
Groo
Я имею в виду, я хочу читать данные как блок или поток, обрабатывая их в памяти и записывая их обратно. Прежде чем я прочитал все данные в datatable, зацикленные над ними, преобразованные значения, добавленные столбцы, delted rows, .... и они написали полную datatable back (xml, database, csv, ...). Но данных слишком много (количество данных становится слишком большим), и мне нужно разделить обработку (чтение, обработку, запись) на «блоки» или использовать что-то вроде потоковой передачи. – JohnnyBravo75