我正在制作一个网站,我有一个 for 每个循环,需要 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
在 InitializeRow
的事件处理程序中,我希望为单行调用它,您正在遍历所有行。 因此,我怀疑您已经将应该线性的操作转换为行数(事件为每行触发一次,并且您仅对该行进行操作(转换为行数二次的操作(对于每一行,您遍历每一行(。
根据事件名称,我认为您根本不应该拥有For Each
循环。 看起来您应该从事件参数中获取适当的行并仅对该行进行操作。
这可能更适合代码审查,但这是我的想法。
- 使用字符串构建连接字符串
- 不要连接 sql!使用参数。
- 获取所有唯一的 Terr 并执行一个查询。
- 数据库查询一定是您的瓶颈。
- Terr 似乎是数字和字符串的混合体。尝试严格打开选项。