Pregunta

Tengo una lista de quizás 50,000 entradas que están pobladas en DataGrid en WPF. Ahora quiero guardar los datos en la lista en un archivo que puede ser texto, o preferiblemente CSV. Como la lista es demasiado grande. Existe un problema de que mi método implementado que puede ser una simple escritura de archivos de texto o el método para copiar el contenido del DataGrid al portapapeles y luego volver a la cadena, y luego esa cadena para archivar usando StreamReader. Consume aproximadamente 4-5 minutos, incluso en el trabajador de fondo.

¿Hay alguna forma en que pueda guardar una lista enorme para archivar rápidamente?

Estoy usando DataGrid en WPF

CÓDIGO

 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();
¿Fue útil?

Solución

En lugar de usar el portapapeles, ¿por qué no iterar a través de la datos de datos y crear el archivo CSV?

Actualizar

Aquí hay unos ejemplos:

Convertir DataTable a CSV Stream

Convertir el conjunto de datos dataTable a CSV

Otros consejos

Una cosa que ayudará es no cargar todos sus datos en el DataGrid cuando lo use para fines de visualización. Sería una buena idea usar la paginación: solo cargue los datos en el DataGrid que se necesitarán para cálculos o fines de visualización. Si el usuario quiere ver/usar más datos, regrese a su fuente de datos y obtenga más datos. Su aplicación no solo se ejecutará más rápido, sino que usará mucha menos memoria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top