vb.net代码的性能改进

vb.net代码的性能改进,vb.net,optimization,vb.net-2010,Vb.net,Optimization,Vb.net 2010,我需要将5000万条72列的记录写入文本文件,文件大小正在增长为9.7gb 我需要检查每个列的长度,并根据XML文件中定义的长度进行格式化 从oracle中逐个读取记录,检查格式并写入文本文件 写5亿美元的记录需要24个多小时。如何在下面的代码中提高性能 Dim valString As String = Nothing Dim valName As String = Nothing Dim valLength As String = Nothing

我需要将5000万条72列的记录写入文本文件,文件大小正在增长为9.7gb

我需要检查每个列的长度,并根据XML文件中定义的长度进行格式化

从oracle中逐个读取记录,检查格式并写入文本文件

写5亿美元的记录需要24个多小时。如何在下面的代码中提高性能

Dim valString As String = Nothing
        Dim valName As String = Nothing
        Dim valLength As String = Nothing
        Dim valDataType As String = Nothing
        Dim validationsArray As ArrayList = GetValidations(Directory.GetCurrentDirectory() + "\ReportFormat.xml")
        Console.WriteLine("passed xml")
        Dim k As Integer = 1


        Try
            Console.WriteLine(System.DateTime.Now())
            Dim selectSql As String = "select * from table where
            " record_date >= To_Date('01-01-2014','DD-MM-YYYY') and record_date <= To_Date('31-12-2014','DD-MM-YYYY')"
            Dim dataTable As New DataTable
            Dim oracleAccess As New OracleConnection(System.Configuration.ConfigurationManager.AppSettings("OracleConnection"))
            Dim cmd As New OracleCommand()
            cmd.Connection = oracleAccess
            cmd.CommandType = CommandType.Text
            cmd.CommandText = selectSql
            oracleAccess.Open()
            Dim Tablecolumns As New DataTable()
            Using oracleAccess
                Using writer = New StreamWriter(Directory.GetCurrentDirectory() + "\FileName.txt")
                    Using odr As OracleDataReader = cmd.ExecuteReader()
                        Dim sbHeaderData As New StringBuilder
                        For i As Integer = 0 To odr.FieldCount - 1
                            sbHeaderData.Append(odr.GetName(i))
                            sbHeaderData.Append("|")
                        Next
                        writer.WriteLine(sbHeaderData)
                        While odr.Read()
                            Dim sbColumnData As New StringBuilder
                            Dim values(odr.FieldCount - 1) As Object
                            Dim fieldCount As Integer = odr.GetValues(values)
                            For i As Integer = 0 To fieldCount - 1
                                Dim vals As Array = validationsArray(i).ToString.ToUpper.Split("|")
                                valName = vals(0).trim
                                valDataType = vals(1).trim
                                valLength = vals(2).trim

                                Select Case valDataType
                                    Case "VARCHAR2"
                                        If values(i).ToString().Length = valLength Then
                                            sbColumnData.Append(values(i).ToString())
                                            'sbColumnData.Append("|")
                                        ElseIf values(i).ToString().Length > valLength Then
                                            sbColumnData.Append(values(i).ToString().Substring(0, valLength))
                                            'sbColumnData.Append("|")
                                        Else
                                            sbColumnData.Append(values(i).ToString().PadRight(valLength))
                                            'sbColumnData.Append("|")
                                        End If
                                    Case "NUMERIC"
                                        valLength = valLength.Substring(0, valLength.IndexOf(","))
                                        If values(i).ToString().Length = valLength Then
                                            sbColumnData.Append(values(i).ToString())
                                            'sbColumnData.Append("|")
                                        Else
                                            sbColumnData.Append(values(i).ToString().PadLeft(valLength, "0"c))
                                            'sbColumnData.Append("|")
                                        End If
                                        'sbColumnData.Append((values(i).ToString()))
                                End Select
                            Next
                            writer.WriteLine(sbColumnData)

                            k = k + 1
                            Console.WriteLine(k)
                        End While
                    End Using
                    writer.WriteLine(System.DateTime.Now())
                End Using
            End Using

            Console.WriteLine(System.DateTime.Now())
            'Dim Adpt As New OracleDataAdapter(selectSql, oracleAccess)
            'Adpt.Fill(dataTable)
            Return Tablecolumns
        Catch ex As Exception
            Console.WriteLine(System.DateTime.Now())
            Console.WriteLine("Error: " & ex.Message)
            Console.ReadLine()
            Return Nothing
        End Try

我建议您进行代码审查。您能帮我做些什么来降低流程中的时间线吗?前面提到的评论非常清楚。这不是一个适合于SO(即关于特定问题的问题)的问题,而是一个适用于代码审查的问题,在代码审查中,您可以询问代码中更复杂的问题,如性能分析。