【问题标题】:Want to speed up my vb.net For Each loop想加快我的 vb.net For Each 循环
【发布时间】:2017-06-29 13:01:33
【问题描述】:

我正在制作一个网站,我有一个 for each 循环,需要 2.5 分钟才能完成。

我想知道是否有人知道我可以如何加快速度。循环内的两个 if 语句都必须保留在那里。

 Protected Sub WebDataGrid1_InitializeRow(sender As Object, e As Infragistics.Web.UI.GridControls.RowEventArgs) Handles WebDataGrid1.InitializeRow
        Dim SqlString As String = ""
        Dim TerrMapTable As New DataTable
        Dim Terr As String = ""
        Dim RgnMgr As String = ""
        Dim Reg As String = ""
        Dim TerrMap As String = ""

        For Each GridRecord As GridRecord In WebDataGrid1.Rows
            Terr = GridRecord.Items.FindItemByKey("ABAN8").Value
            RgnMgr = GridRecord.Items.FindItemByKey("RgnMgr").Value
            If Terr < 9000 Then
                Terr = "T" & Terr
            Else
                Terr = "TA1" & Right(Terr, 2)
            End If

            SqlString = "Select distinct Terr, Region from TerrReg WHERE Terr='" & Terr & "'"

            TerrMapTable = OleFun.GetMyDataTableString(SqlString, 4)

            If TerrMapTable.Rows.Count <> 0 Then
                Reg = TerrMapTable(0)(1)

                TerrMap = "<a href=""/Mapper/Territory_Maps/" & Reg & "/" & Terr & "/" & Terr & "-" & Reg & "-" & "Territory.htm"" target=""_Blank""><b>PIC</b></a>"

                GridRecord.Items.FindItemByKey("TerrMap").Text = TerrMap
            Else
            End If
        Next

    End Sub

【问题讨论】:

  • 一开始你为什么要遍历每一行?
  • 这个问题适合codereview.stackexchange.com...
  • 看看这个SO Q&A
  • 您不应该在每次迭代中运行查询,我怀疑这是您唯一的问题。尝试先获取所有数据,然后从内存中获取所需的数据。您的表有多大,一次查询需要多长时间?更好的是,显示执行计划。

标签: vb.net infragistics


【解决方案1】:

InitializeRow 的事件处理程序中,我希望为单行调用它,您正在循环所有行。结果,我怀疑您已经将一个应该是线性的操作转换为行数(每行触发一次事件,并且您仅对该行进行操作)转换为行数为二次的操作(对于每一行,你循环遍历每一行)。

根据事件名称,我认为您根本不应该有 For Each 循环。看起来您应该从事件参数中获取适当的行并仅对该行进行操作。

【讨论】:

    【解决方案2】:

    这可能更适合代码审查,但这是我的想法。

    • 使用字符串构建来连接字符串
    • 不要连接 sql!使用参数。
    • 获取所有唯一 Terr 并进行一次查询。
    • 数据库查询一定是您的瓶颈。
    • Terr 似乎是数字和字符串的混合体。试试 option strict on。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      相关资源
      最近更新 更多