Как сохранить большие данные в файл

У меня есть список из 50 000 записей, которые заполняются в сетке данных в wpf. Теперь я хочу сохранить данные в списке в файл, который может быть текстовым или предпочтительно CSV. Так как список слишком большой. Существует проблема, связанная с тем, что мой реализованный метод может быть простой записью текстового файла или методом копирования содержимого из сетки данных в буфер обмена, а затем обратно в строку, а затем эту строку в файл с помощью StreamReader. Он потребляет около 4-5 минут, даже если он находится в фоновом режиме.

Есть ли способ быстро сохранить огромный список в файл?

Я использую DataGrid в WPF

КОД

 dataGrid1.SelectAllCells();
            dataGrid1.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
            ApplicationCommands.Copy.Execute(null, dataGrid1);
   String result = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue);


///Never reach to step Below thread stays on above line
                dataGrid1.UnselectAllCells();
                Clipboard.Clear();
                StreamWriter file = new System.IO.StreamWriter(SavePageRankToPDF.FileName);
                file.WriteLine(result);
                file.Close();

person Afnan Bashir    schedule 22.03.2011    source источник
comment
Какой класс DataGrid вы используете? Какой язык?   -  person MonkeyWrench    schedule 22.03.2011
comment
Можете ли вы показать нам код, который вы используете в настоящее время и который занимает так много времени? Если вы выполняете код в отладчике, какой шаг занимает больше всего времени?   -  person David    schedule 22.03.2011
comment
Используете ли вы datagrid как автономный объект или он привязан к базе данных?   -  person Albert Perrien    schedule 22.03.2011
comment
автономные данные поступают из пользовательского списка. Мне было интересно использовать список, а не использовать этот подход.   -  person Afnan Bashir    schedule 22.03.2011
comment
Итак, данные находятся в вашем списке (наборе данных?), И вы указываете на них своей сеткой?   -  person Albert Perrien    schedule 22.03.2011
comment
Вы можете проверить это gist.github.com/riyadparvez/4467668.   -  person user    schedule 12.03.2013


Ответы (2)


Вместо того, чтобы использовать буфер обмена, почему бы не перебрать таблицу данных и не создать файл csv.

Обновить

Вот некоторые примеры:

Преобразовать DataTable в поток CSV

Преобразование DataSet\DataTable в CSV

person Community    schedule 22.03.2011
comment
любой пример создания csv с ietration - person Afnan Bashir; 23.03.2011

Одна вещь, которая поможет, — это не загружать ВСЕ ваши данные в сетку данных при использовании ее для целей отображения. Было бы неплохо использовать разбиение по страницам: загружайте в сетку данных только те данные, которые потребуются для расчетов или отображения. Если пользователь хочет увидеть/использовать больше данных, вернитесь к источнику данных и получите больше данных. Мало того, что ваше приложение будет работать быстрее, вы будете использовать гораздо меньше памяти.

person MonkeyWrench    schedule 22.03.2011
comment
да, я управлял данными в сетке данных, для отображения всех данных требуется около 3-4 секунд, но больше всего я страдаю от сохранения файлов. - person Afnan Bashir; 22.03.2011
comment
проблема не в сетке. Проблема в записи файлов. Есть ли способ, которым я могу исключить использование памяти буфера обмена и использовать список для записи файлов - person Afnan Bashir; 22.03.2011