Можно ли каким-либо образом улучшить этот медленно работающий код VB.Net? - PullRequest
1 голос
/ 22 ноября 2011

В моем приложении работает приведенный ниже код, и его запуск занимает около 2–6 секунд, в среднем это около 3-4 секунд.Я знаю, что хранимая процедура выполняется менее чем за секунду, поэтому проблема должна быть с моим кодом VB.Net.Есть ли что-нибудь, что я могу сделать с этим, чтобы вообще улучшить производительность?

Пока я немного ускорил это, заставив мой сохраненный процесс возвращать часть HTML, готовую для вставки в каждый элемент, вместо того, чтобы иметь несколько IFоператоры внутри цикла, и я изменил цикл на время, а не для каждого, который помог немного.Я предполагаю, что некоторые проблемы с производительностью могут быть связаны с сервером, но я также хотел бы знать, есть ли в моем коде что-нибудь, что можно улучшить.

Спасибо

   Private Sub dbGetOpenUnassignedTickets()

      ' Here we need to get the results of the query
      Dim Events As New DataTable()

      Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString())

      Dim cmd As New SqlCommand
      cmd.CommandType = CommandType.StoredProcedure
      cmd.CommandText = "spGetUnassignedTickets"

      cmd.Connection = conn

      Using da As New SqlDataAdapter(cmd)
         conn.Open()
         da.Fill(Events)
         conn.Close()
      End Using

      Dim TicketHTML As String = String.Empty
      Dim counter As Integer = 0
      While (counter < Events.Rows.Count - 1)

         Dim strDragDrop As String

         strDragDrop = "onmousedown='return DayPilotCalendar.dragStart(this.parentNode, 60*30, """ & Events.Rows(counter)("TicketID") & """, ""EE"");'"

         'IF Current user <> looking at their own schedule AND not allowed to assign tickets
         If (Session("UserID") <> ddlUser.SelectedValue And Session("AssignTickets") = 0) Then
            strDragDrop = String.Empty
         End If

         TicketHTML = TicketHTML + Events.Rows(counter)("SeverityHTML")

         TicketHTML = TicketHTML + "<table width='100%' " + strDragDrop + ">"

         TicketHTML = TicketHTML + Events.Rows(counter)("TypeHTML")

         TicketHTML = TicketHTML + Events.Rows(counter)("ProductHTML")

         TicketHTML = TicketHTML + "<tr>"
         TicketHTML = TicketHTML + "<td colspan='2'><b>Description</b> <br />" + Events.Rows(counter)("DescriptionHTML") + "</td>"

         TicketHTML = TicketHTML + "</tr>"

         TicketHTML = TicketHTML + "<tr>"
         TicketHTML = TicketHTML + "<td>"
         TicketHTML = TicketHTML + "<b>Logged Date:</b>"
         TicketHTML = TicketHTML + "</td>"
         TicketHTML = TicketHTML + "<td align='left'>"
         TicketHTML = TicketHTML + Events.Rows(counter)("LogDate")
         TicketHTML = TicketHTML + "</td>"
         TicketHTML = TicketHTML + "</tr>"

         TicketHTML = TicketHTML + "</table>"
         TicketHTML = TicketHTML + "</div>"

         counter = counter + 1

      End While

      ' And now update the inner HTML of the thing we are putting the tickets into
      divTickets.InnerHtml = TicketHTML

   End Sub

Ответы [ 3 ]

5 голосов
/ 22 ноября 2011

Я рекомендую использовать SqlDataReader для извлечения данных и StringBuilder для построения вашего HTML.

Вы также можете изменить или сделать новую версию spGetUnassignedTickets, которая возвращает только необходимые столбцы.

1 голос
/ 22 ноября 2011

Как и другие предполагали, StringBuilder даст вам значительное увеличение скорости (особенно если вы используете много записей).

Я бы также зациклил строки с For Each dr As DataRow in Events.Rows и затем сказал бы dr("TypeHtml") вместо Events.Rows(counter)("TypeHTML") и т.д ...

1 голос
/ 22 ноября 2011

Измените TicketHTML на string Builder для ускорения струнной части

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...