esto lo he hecho pero con un Foreach recorriendo todoas las lineas pero me parece que se demora un poco, pues pienso que con el LinQ puede hacerlo mas rápido, de manera que pido su ayuda .. saludos y gracias desde ya
Date cuenta de que cada vez que llamas al método "DataGridView1.Rows.Add" para agregar una fila estás invocando el evento de redibujado del control, ya que el control debe dibujar la fila y refrescar el contenido. Eso multiplicado por 35.000 lineas debe de tardarte una auténtica eternidad...
Lo aconsejable es que adaptes tu código para utilizar el método ADDRANGE en lugar de ADD, de esa forma añades todas las filas de una vez y evitas redibujados adicionales e innecesarios del control.
O también puedes especificar un origen de datos en la propiedad DATASOURCE como en el siguiente ejemplo usando LINQ donde genero un tipo anónimo como origen de datos:
Dim filePath As String = ".\código_penal.txt"
Dim textLines As IEnumerable(Of String) =
File.
ReadLines(filePath, Encoding.
Default)
Dim rows As IEnumerable(Of String()) =
From line As String In textLines
Select line.Split(ControlChars.Tab)
Dim dataSource As IEnumerable(Of Object) =
(From row As String() In rows
Select New With {
.Left = row(0),
.Right = row(1)}
).ToList()
Me.DataGridView1.DataSource = dataSource
La carga de filas es casi casi practicamente instantanea.
PD: para este caso en concreto no está del todo mal utilizar LINQ (si lo prefieres podrías utilizar un For y una colección de tipo List, aunque habría que escribir más código), pero ten en cuenta que LINQ siempre será más lento que iterar los elementos de un array mediante un búcle For tradicional. Digo esto por el comentario que hiciste sobre la velocidad de ejecución de un For. Por que el problema de velocidad en tu código no es el uso del For, sino las miles de llamadas consecutivas al método "DataGridView1.Rows.Add" que ralentizan el procedimiento de adición de dichas filas, como ya expliqué.
-Enjuto Mojamuto "rey de los frikis" a su disposición para futuras dudas.