Note that there are some explanatory texts on larger screens.

plurals
  1. POCode Efficiency: Iterations and Queries
    primarykey
    data
    text
    <p> The code below does a few things:</p> <ul> <li><p>Iterates through a colleciton of labels I have on my Windows form, used as a placeholder</p></li> <li><p>While iterating through the collection, the code is connecting to an SQL database to return a result from a query for each label (about 104 labels)</p></li> <li><p>Finally some charts are populates.</p></li> </ul> <p>I have timed this whole process and it takes about 4 or 5 seconds. My goal is to have this process performed instantly or 1 seconds or less.</p> <p>Could an expert out there explain to me what I'm doing wrong and why this process takes so long?</p> <p>here is the query:</p> <pre class="lang-vb prettyprint-override"><code>Dim RESULT1 As Decimal 'declare this as global Dim RESULT2 As Decimal 'declare this as global Private Sub Week(ByVal week As Integer) Dim queryString As String = "SELECT " &amp; _ " (SELECT CAST(SUM(TARGET_SECONDS) AS DECIMAL)/ CAST(SUM(ROUTE_SECONDS) AS DECIMAL) FROM dbo.APE_BUSDRIVER_MAIN WITH(NOLOCK) WHERE ACTIVE = 1 AND EMPLOYEE_NAME = '" &amp; cbEmployeeName.Text &amp; "') AS RESULT1," &amp; _ " (SELECT (SELECT CAST(COUNT(APE_BUSDRIVER_STATUS_OBJID) AS DECIMAL) FROM dbo.APE_BUSDRIVER_MAIN AS RESULT2 WHERE ACTIVE = 1 AND APE_BUSDRIVER_STATUS_OBJID= 1 AND EMPLOYEE_NAME = '" &amp; cbEmployeeName.Text &amp; "' )/(SELECT CAST(COUNT(APE_BUSDRIVER_STATUS_OBJID) AS DECIMAL) FROM dbo.APE_BUSDRIVER_MAIN AS RESULT2 WHERE ACTIVE = 1 AND EMPLOYEE_NAME = '" &amp; cbEmployeeName.Text &amp; "' )) AS RESULT2" &amp; _ " FROM dbo.APE_BUSDRIVER_MAIN WHERE WEEK_TIME = " &amp; week &amp; " AND APE_AREA_OBJID = " &amp; lblAreaOBJID.Text &amp; " AND EMPLOYEE_NAME = '" &amp; cbEmployeeName.Text &amp; "' AND YEAR_TIME = '" &amp; cbYear.Text &amp; "' AND ACTIVE = 1" Using connection As New SqlConnection(SQLConnectionStr) Dim command As New SqlCommand(queryString, connection) connection.Open() Dim reader As SqlDataReader = command.ExecuteReader() ' Call Read before accessing data. If reader.HasRows Then While reader.Read() RESULT1 = reader("RESULT1") RESULT2 = reader("RESULT2") End While Else RESULT1 = 0 RESULT2 = 0 End If ' Call Close when done reading. reader.Close() End Using End Sub </code></pre> <p>Here is the code:</p> <pre class="lang-vb prettyprint-override"><code>Private Sub LoadWeeklyStats() For i As Integer = 0 To 51 Dim LabelWkEff As String = "LblWkEff" + (i + 1).ToString Dim myArray1 As Array = Controls.Find(LabelWkEff, False) Dim myControl1 As Label = myArray1(0) myControl1.Text = RESULT1 'AND Dim LabelDeliveryStat As String = "lblDeliveryStat" + (i + 1).ToString Dim myArray2 As Array = Controls.Find(LabelDeliveryStat, False) Dim myControl2 As Label = myArray2(0) myControl2.Text = RESULT2 'COUNTER Week(i + 1) Next 'TO CLEAR CHART AND RELOAD IT Chart1.Titles.Clear() Chart1.Series.Clear() Chart1.ChartAreas.Clear() Chart1.ChartAreas.Add("AREA") Chart1.Series.Add("WeeklyEfficiency") Chart1.Series.Add("TARGET") Chart1.Titles.Add("ROUTE EFFICIENCY") Chart1.Series("TARGET").ChartType = SeriesChartType.Line With Chart1.Titles(0) .Font = New Font("TAHOMA", 12, FontStyle.Bold) End With With Chart1.ChartAreas(0) '.AxisY.MajorGrid.Enabled = False .AxisX.MajorGrid.Enabled = False .AxisX.Title = "WEEKS" .AxisY.Title = "EFFICIENCY" .AxisX.Minimum = 0 .AxisX.Maximum = 53 .AxisY.Minimum = 0 .AxisX.Interval = 1 .AxisY.LabelStyle.Format = Format(0, "0%") End With With Chart1.Series(0) .Font = New Font(Me.Font.Name, 7, FontStyle.Regular) .SmartLabelStyle.Enabled = False .LabelAngle = -90 .Label = "#VAL{P}" .IsValueShownAsLabel = True .Name = "WeeklyEfficiency" .ChartType = SeriesChartType.Column .LabelToolTip = Enabled .ToolTip = "WEEK #VALX" &amp; vbNewLine &amp; "#VAL{P}" .BorderColor = Color.Black .LabelForeColor = Color.Transparent Dim area As String = cbArea.Text Select Case area Case "BC_PICKUP" .Color = Color.Blue Case "BC_DELIVERY" .Color = Color.Blue Case "RAW" .Color = Color.LimeGreen Case "RTV" .Color = Color.Yellow Case Else .Color = Color.Black End Select 'LOAD DATA POINTS With .Points .AddXY(0, 0) .AddXY(1, LblWkEff1.Text) .AddXY(2, LblWkEff2.Text) .AddXY(3, LblWkEff3.Text) .AddXY(4, LblWkEff4.Text) .AddXY(5, LblWkEff5.Text) .AddXY(6, LblWkEff6.Text) .AddXY(7, LblWkEff7.Text) .AddXY(8, LblWkEff8.Text) .AddXY(9, LblWkEff9.Text) .AddXY(10, LblWkEff10.Text) .AddXY(11, LblWkEff11.Text) .AddXY(12, LblWkEff12.Text) .AddXY(13, LblWkEff13.Text) .AddXY(14, LblWkEff14.Text) .AddXY(15, LblWkEff15.Text) .AddXY(16, LblWkEff16.Text) .AddXY(17, LblWkEff17.Text) .AddXY(18, LblWkEff18.Text) .AddXY(19, LblWkEff19.Text) .AddXY(20, LblWkEff20.Text) .AddXY(21, LblWkEff21.Text) .AddXY(22, LblWkEff22.Text) .AddXY(23, LblWkEff23.Text) .AddXY(24, LblWkEff24.Text) .AddXY(25, LblWkEff25.Text) .AddXY(26, LblWkEff26.Text) .AddXY(27, LblWkEff27.Text) .AddXY(28, LblWkEff28.Text) .AddXY(29, LblWkEff29.Text) .AddXY(30, LblWkEff30.Text) .AddXY(31, LblWkEff33.Text) .AddXY(32, LblWkEff32.Text) .AddXY(33, LblWkEff33.Text) .AddXY(34, LblWkEff34.Text) .AddXY(35, LblWkEff35.Text) .AddXY(36, LblWkEff36.Text) .AddXY(37, LblWkEff37.Text) .AddXY(38, LblWkEff38.Text) .AddXY(39, LblWkEff39.Text) .AddXY(40, LblWkEff40.Text) .AddXY(41, LblWkEff41.Text) .AddXY(42, LblWkEff42.Text) .AddXY(43, LblWkEff43.Text) .AddXY(44, LblWkEff44.Text) .AddXY(45, LblWkEff45.Text) .AddXY(46, LblWkEff46.Text) .AddXY(47, LblWkEff47.Text) .AddXY(48, LblWkEff48.Text) .AddXY(49, LblWkEff49.Text) .AddXY(50, LblWkEff50.Text) .AddXY(51, LblWkEff51.Text) .AddXY(52, LblWkEff52.Text) .AddXY(53, 0) End With End With With Chart1.Series("TARGET") .Name = "TARGET" .ChartType = SeriesChartType.Line .Color = Color.Red .BorderWidth = 3 With .Points .AddXY(0, 1) .AddXY(1, 1) .AddXY(2, 1) .AddXY(3, 1) .AddXY(4, 1) .AddXY(5, 1) .AddXY(6, 1) .AddXY(7, 1) .AddXY(8, 1) .AddXY(9, 1) .AddXY(10, 1) .AddXY(11, 1) .AddXY(12, 1) .AddXY(13, 1) .AddXY(14, 1) .AddXY(15, 1) .AddXY(16, 1) .AddXY(17, 1) .AddXY(18, 1) .AddXY(19, 1) .AddXY(20, 1) .AddXY(21, 1) .AddXY(22, 1) .AddXY(23, 1) .AddXY(24, 1) .AddXY(25, 1) .AddXY(26, 1) .AddXY(27, 1) .AddXY(28, 1) .AddXY(29, 1) .AddXY(30, 1) .AddXY(31, 1) .AddXY(32, 1) .AddXY(33, 1) .AddXY(34, 1) .AddXY(35, 1) .AddXY(36, 1) .AddXY(37, 1) .AddXY(38, 1) .AddXY(39, 1) .AddXY(40, 1) .AddXY(41, 1) .AddXY(42, 1) .AddXY(43, 1) .AddXY(44, 1) .AddXY(45, 1) .AddXY(46, 1) .AddXY(47, 1) .AddXY(48, 1) .AddXY(49, 1) .AddXY(50, 1) .AddXY(51, 1) .AddXY(52, 1) .AddXY(53, 1) End With End With 'MAKE ONTIME CHART '______________________________________________________________________________() 'TO CLEAR CHART AND RELOAD IT Chart2.Titles.Clear() Chart2.Series.Clear() Chart2.ChartAreas.Clear() Chart2.ChartAreas.Add("AREA") Chart2.Series.Add("WeeklyEfficiency") Chart2.Series.Add("TARGET") Chart2.Titles.Add("ON TIME EFFICIENCY") With Chart2.Titles(0) .Font = New Font("TAHOMA", 12, FontStyle.Bold) End With With Chart2.ChartAreas(0) '.AxisY.MajorGrid.Enabled = False .AxisX.MajorGrid.Enabled = False .AxisX.Title = "WEEKS" .AxisY.Title = "EFFICIENCY" .AxisX.Minimum = 0 .AxisX.Maximum = 53 .AxisY.Minimum = 0 .AxisX.Interval = 1 .AxisY.LabelStyle.Format = Format(0, "0%") End With With Chart2.Series(0) .Font = New Font(Me.Font.Name, 7, FontStyle.Regular) .SmartLabelStyle.Enabled = False .LabelAngle = -90 .Label = "#VAL{P}" .IsValueShownAsLabel = True .Name = "WeeklyEfficiency" .ChartType = SeriesChartType.Column .LabelToolTip = Enabled .ToolTip = "WEEK #VALX" &amp; vbNewLine &amp; "#VAL{P}" .BorderColor = Color.Black .LabelForeColor = Color.Transparent Dim area As String = cbArea.Text Select Case area Case "BC_PICKUP" .Color = Color.Blue Case "BC_DELIVERY" .Color = Color.Blue Case "RAW" .Color = Color.LimeGreen Case "RTV" .Color = Color.Yellow Case Else .Color = Color.Black End Select 'LOAD DATA POINTS .Points.AddXY(0, 0) .Points.AddXY(1, lblDeliveryStat1.Text) .Points.AddXY(2, lblDeliveryStat2.Text) .Points.AddXY(3, lblDeliveryStat3.Text) .Points.AddXY(4, lblDeliveryStat4.Text) .Points.AddXY(5, lblDeliveryStat5.Text) .Points.AddXY(6, lblDeliveryStat6.Text) .Points.AddXY(7, lblDeliveryStat7.Text) .Points.AddXY(8, lblDeliveryStat8.Text) .Points.AddXY(9, lblDeliveryStat9.Text) .Points.AddXY(10, lblDeliveryStat10.Text) .Points.AddXY(11, lblDeliveryStat11.Text) .Points.AddXY(12, lblDeliveryStat12.Text) .Points.AddXY(13, lblDeliveryStat13.Text) .Points.AddXY(14, lblDeliveryStat14.Text) .Points.AddXY(15, lblDeliveryStat15.Text) .Points.AddXY(16, lblDeliveryStat16.Text) .Points.AddXY(17, lblDeliveryStat17.Text) .Points.AddXY(18, lblDeliveryStat18.Text) .Points.AddXY(19, lblDeliveryStat19.Text) .Points.AddXY(20, lblDeliveryStat20.Text) .Points.AddXY(21, lblDeliveryStat21.Text) .Points.AddXY(22, lblDeliveryStat22.Text) .Points.AddXY(23, lblDeliveryStat23.Text) .Points.AddXY(24, lblDeliveryStat24.Text) .Points.AddXY(25, lblDeliveryStat25.Text) .Points.AddXY(26, lblDeliveryStat26.Text) .Points.AddXY(27, lblDeliveryStat27.Text) .Points.AddXY(28, lblDeliveryStat28.Text) .Points.AddXY(29, lblDeliveryStat29.Text) .Points.AddXY(30, lblDeliveryStat30.Text) .Points.AddXY(31, lblDeliveryStat33.Text) .Points.AddXY(32, lblDeliveryStat32.Text) .Points.AddXY(33, lblDeliveryStat33.Text) .Points.AddXY(34, lblDeliveryStat34.Text) .Points.AddXY(35, lblDeliveryStat35.Text) .Points.AddXY(36, lblDeliveryStat36.Text) .Points.AddXY(37, lblDeliveryStat37.Text) .Points.AddXY(38, lblDeliveryStat38.Text) .Points.AddXY(39, lblDeliveryStat39.Text) .Points.AddXY(40, lblDeliveryStat40.Text) .Points.AddXY(41, lblDeliveryStat41.Text) .Points.AddXY(42, lblDeliveryStat42.Text) .Points.AddXY(43, lblDeliveryStat43.Text) .Points.AddXY(44, lblDeliveryStat44.Text) .Points.AddXY(45, lblDeliveryStat45.Text) .Points.AddXY(46, lblDeliveryStat46.Text) .Points.AddXY(47, lblDeliveryStat47.Text) .Points.AddXY(48, lblDeliveryStat48.Text) .Points.AddXY(49, lblDeliveryStat49.Text) .Points.AddXY(50, lblDeliveryStat50.Text) .Points.AddXY(51, lblDeliveryStat51.Text) .Points.AddXY(52, lblDeliveryStat52.Text) .Points.AddXY(53, 0) End With With Chart2.Series("TARGET") .Name = "TARGET" .ChartType = SeriesChartType.Line .Color = Color.Red .BorderWidth = 3 With .Points .AddXY(0, 1) .AddXY(1, 1) .AddXY(2, 1) .AddXY(3, 1) .AddXY(4, 1) .AddXY(5, 1) .AddXY(6, 1) .AddXY(7, 1) .AddXY(8, 1) .AddXY(9, 1) .AddXY(10, 1) .AddXY(11, 1) .AddXY(12, 1) .AddXY(13, 1) .AddXY(14, 1) .AddXY(15, 1) .AddXY(16, 1) .AddXY(17, 1) .AddXY(18, 1) .AddXY(19, 1) .AddXY(20, 1) .AddXY(21, 1) .AddXY(22, 1) .AddXY(23, 1) .AddXY(24, 1) .AddXY(25, 1) .AddXY(26, 1) .AddXY(27, 1) .AddXY(28, 1) .AddXY(29, 1) .AddXY(30, 1) .AddXY(31, 1) .AddXY(32, 1) .AddXY(33, 1) .AddXY(34, 1) .AddXY(35, 1) .AddXY(36, 1) .AddXY(37, 1) .AddXY(38, 1) .AddXY(39, 1) .AddXY(40, 1) .AddXY(41, 1) .AddXY(42, 1) .AddXY(43, 1) .AddXY(44, 1) .AddXY(45, 1) .AddXY(46, 1) .AddXY(47, 1) .AddXY(48, 1) .AddXY(49, 1) .AddXY(50, 1) .AddXY(51, 1) .AddXY(52, 1) .AddXY(53, 1) End With End With End Sub </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload