2017-06-29 3 views
0

私はウェブサイトを作っていますが、実行するのに2.5分かかります。私のvb.netをスピードアップしたいループごとに

私はそれをスピードアップできる方法が分かっていますか?ループ内の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 
+2

なぜあなたは最初の行ですべての行を通過していますか? – Mederic

+2

この質問はhttps://codereview.stackexchange.comに適しています... – Codexer

+0

これを見てください[SO Q&A](https://stackoverflow.com/questions/33302962/performance-difference-between-looping-range-vs -looping-array)である。 – MikeJRamsey56

答えて

1

これはコードレビューに適していますが、これは私の考えです。 SQLを連結しない文字列

  • を連結する

    • 使用し、文字列の建物!パラメータを使用します。
    • すべてのユニークなTerrを取得し、1つのクエリを実行します。
    • データベースクエリがボトルネックになっている必要があります。
    • Terrは数字と文字列が混在しているようです。オプションを厳密に試してください。
  • 2

    InitializeRowのイベントハンドラでは、単一の行に対して呼び出されると予想されますが、すべての行をループしています。その結果、行数に直線的になる操作(行ごとに1回イベントが発生し、その行でのみ操作する)を行数で2次の操作に変更したと考えられます(各行ごとに、各行をループします)。

    イベント名に基づいて、私はFor Eachループを持つべきではないと思います。イベント引数から適切な行を取得し、その行だけを操作する必要があるようです。

    関連する問題