From a434c83191a94606813e0a0d271e71135a882405 Mon Sep 17 00:00:00 2001 From: JenneJ Date: Wed, 1 Jun 2016 15:21:19 +0200 Subject: [PATCH] jj 01.06 --- app/DD-Record-Organiser/ClassControlLoader.vb | 23 ++++++++++++--- app/DD-Record-Organiser/ClassControlValues.vb | 28 +++++++------------ .../ModuleHelperMethods.vb | 26 +++++++++++++++++ .../frmConstructor_Main.vb | 2 +- 4 files changed, 56 insertions(+), 23 deletions(-) diff --git a/app/DD-Record-Organiser/ClassControlLoader.vb b/app/DD-Record-Organiser/ClassControlLoader.vb index 6c318a2..b07e92f 100644 --- a/app/DD-Record-Organiser/ClassControlLoader.vb +++ b/app/DD-Record-Organiser/ClassControlLoader.vb @@ -96,9 +96,10 @@ final = ClassDatabase.Return_Datatable(sqlCommand) End If ClassControlValueCache.SaveToCache(sqlCommand, final) + Console.WriteLine("CACHE MISS") Else final = cached - ' Console.WriteLine("CACHE HIT") + Console.WriteLine("CACHE HIT") End If Return final @@ -127,10 +128,11 @@ End Sub Overloads Shared Sub SetDataSource(control As CustomComboBox, dt As DataTable) - Dim sw As Stopwatch = Stopwatch.StartNew() + Dim sw As New SW("SetDataSource CustomComboBox") Dim columnCount As Integer = dt.Columns.Count control.BeginUpdate() + PerfomanceHelper.SuspendDraw(control) ' Damit beim Setzen von DisplayMember und ValueMember kein Fehler auftritt, ' muss die Datasource zunächst geleert werden und der selected index auf -1 gesetzt werden. @@ -150,10 +152,10 @@ ' Als letztes setzen wir die DataSource control.DataSource = dt + PerfomanceHelper.ResumeDraw(control) control.EndUpdate() - sw.Stop() - ' Console.WriteLine("SetDataSource for {0} took {1}ms", control.Name, sw.ElapsedMilliseconds) + sw.Done() End Sub Overloads Shared Sub SetDataSource(control As DevExpress.XtraEditors.CheckedListBoxControl, dt As DataTable) @@ -367,7 +369,10 @@ Public Shared Sub LoadList(control As CustomComboBox, formId As Integer, connID As Object, SQLCommand As String) Try + Dim sw As New SW("LoadList CustomComboBox") + Dim sw1 As New SW("GetDynamicValue CustomComboBox") Dim dynamic As DynamicValue = GetDynamicValue(DirectCast(control.Tag, ClassControlMetadata).Id, formId, connID, SQLCommand) + sw1.Done() If dynamic.StaticList IsNot Nothing Then control.DataSource = dynamic.StaticList @@ -377,6 +382,7 @@ SetDataSource(control, dynamic.DataTable) CalculateDropdownWidth(control, dynamic.DataTable) End If + sw.Done() Catch ex As Exception MsgBox("Error in Combobox.LoadList:" & vbNewLine & ex.Message) End Try @@ -444,6 +450,8 @@ Public Shared Sub LoadList(control As DevExpress.XtraEditors.CheckedListBoxControl, formId As Integer, conn_Id As Object, SQLCommand As String) Try + Dim sw As New SW("LoadList CheckedListBoxControl") + Dim dynamic As DynamicValue = GetDynamicValue(DirectCast(control.Tag, ClassControlMetadata).Id, formId, conn_Id, SQLCommand) If dynamic.StaticList IsNot Nothing Then @@ -459,6 +467,7 @@ SetDataSource(control, dynamic.DataTable) End If + sw.Done() Catch ex As Exception MsgBox("Error in CheckedListBox.LoadList:" & vbNewLine & ex.Message) End Try @@ -477,6 +486,8 @@ End Sub Public Shared Sub LoadList(control As DevExpress.XtraEditors.ListBoxControl, formId As Integer, ConnId As Object, SQLCommand As String) + Dim sw As New SW("LoadList ListBoxControl") + Dim dynamic As DynamicValue = GetDynamicValue(DirectCast(control.Tag, ClassControlMetadata).Id, formId, ConnId, SQLCommand) If dynamic.StaticList IsNot Nothing Then @@ -486,6 +497,8 @@ If dynamic.DataTable IsNot Nothing AndAlso dynamic.DataTable.Rows.Count > 0 Then SetDataSource(control, dynamic.DataTable) End If + + sw.Done() End Sub End Class @@ -503,6 +516,8 @@ Public Class DataGridViewCheckable : Inherits _ListControl Public Shared Sub LoadList(control As DevExpress.XtraGrid.GridControl, formId As Integer, ConnId As Object, SQLCommand As String) + Dim sw As New SW("LoadList GridControl") + Dim dynamic As DynamicValue = GetDynamicValue(DirectCast(control.Tag, ClassControlMetadata).Id, formId, ConnId, SQLCommand) If dynamic.StaticList IsNot Nothing Then diff --git a/app/DD-Record-Organiser/ClassControlValues.vb b/app/DD-Record-Organiser/ClassControlValues.vb index 5dd7550..f88203e 100644 --- a/app/DD-Record-Organiser/ClassControlValues.vb +++ b/app/DD-Record-Organiser/ClassControlValues.vb @@ -1,22 +1,7 @@ Imports DevExpress.XtraEditors.Controls -Imports System.Runtime.InteropServices Public Class ClassControlValues - _ - Public Shared Function SendMessage(hWnd As IntPtr, msg As Int32, wParam As Boolean, lParam As Int32) As Integer - End Function - Private Const WM_SETREDRAW As Int32 = 11 - - Private Sub SuspendDraw(c As Control) - SendMessage(c.Handle, WM_SETREDRAW, False, 0) - End Sub - - Private Sub ResumeDraw(c As Control) - SendMessage(c.Handle, WM_SETREDRAW, True, 0) - c.Refresh() - End Sub - Public Shared Function ControlHasValue(control As Control) As Boolean Select Case control.GetType() @@ -194,6 +179,8 @@ Public Class ClassControlValues If LogErrorsOnly = False Then ClassLogger.Add(String.Format(" >> LoadControlHints took {0} to load", Format(elapsed, "0.000000000") & " seconds"), False) sw.Start() For Each control As Control In controls + PerfomanceHelper.SuspendDraw(control) + Dim ControlId As Integer = DirectCast(control.Tag, ClassControlMetadata).Id ' Wert per LINQ aus DT_ControlValues suchen der zur aktuellen controlId passt Dim values As List(Of Object) = (From row In DT_ControlValues.AsEnumerable() @@ -205,6 +192,8 @@ Public Class ClassControlValues Else LoadControlValue(RecordId, ParentRecordId, ControlId, control, values, Entity_ID) End If + + PerfomanceHelper.ResumeDraw(control) Next elapsed = sw.Elapsed.TotalSeconds @@ -348,7 +337,7 @@ Public Class ClassControlValues For Each Ctrl As Control In controls Dim controlTagId = DirectCast(Ctrl.Tag, ClassControlMetadata).Id - + PerfomanceHelper.SuspendDraw(Ctrl) 'If controlTagId = 474 Then ' MsgBox("Thats it") @@ -376,10 +365,9 @@ Public Class ClassControlValues Case GetType(DevExpress.XtraGrid.GridControl) Dim grid = DirectCast(Ctrl, DevExpress.XtraGrid.GridControl) ControlLoader.DataGridViewCheckable.LoadList(grid, FormID, ConnID, sqlcommand) - End Select - + PerfomanceHelper.ResumeDraw(Ctrl) Next sw.Stop() @@ -426,6 +414,8 @@ Public Class ClassControlValues sqlcommand = ReplaceSqlCommandPlaceholders(sqlcommand, RecordId, ParentRecordId, entity_ID) + PerfomanceHelper.SuspendDraw(Ctrl) + Select Case Ctrl.GetType() Case GetType(CustomComboBox) Dim combobox = DirectCast(Ctrl, CustomComboBox) @@ -440,6 +430,8 @@ Public Class ClassControlValues ControlLoader.CheckedListBox.LoadList(chlistbox, FormId, connID, sqlcommand) End Select + + PerfomanceHelper.ResumeDraw(Ctrl) Next Dim elapsed As Double elapsed = SW.Elapsed.TotalSeconds diff --git a/app/DD-Record-Organiser/ModuleHelperMethods.vb b/app/DD-Record-Organiser/ModuleHelperMethods.vb index 31782a5..2c06f6a 100644 --- a/app/DD-Record-Organiser/ModuleHelperMethods.vb +++ b/app/DD-Record-Organiser/ModuleHelperMethods.vb @@ -416,4 +416,30 @@ End Class + Public Class PerfomanceHelper + _ + Public Shared Function SendMessage(hWnd As IntPtr, msg As Int32, wParam As Boolean, lParam As Int32) As Integer + End Function + Private Const WM_SETREDRAW As Int32 = &HB + + ''' + ''' Verhindert Draw-Events. Am Ende sollte ResumeDraw `aufgerufen` werden. + ''' + ''' + ''' + Public Shared Sub SuspendDraw(c As Control) + SendMessage(c.Handle, WM_SETREDRAW, False, 0) + End Sub + + ''' + ''' Lässt die Draw-Events wieder zu. Davor sollte `SuspendDraw` aufgerufen werden + ''' + ''' + ''' + Public Shared Sub ResumeDraw(c As Control) + SendMessage(c.Handle, WM_SETREDRAW, True, 0) + c.Refresh() + End Sub + End Class + End Module diff --git a/app/DD-Record-Organiser/frmConstructor_Main.vb b/app/DD-Record-Organiser/frmConstructor_Main.vb index ae30561..a330a21 100644 --- a/app/DD-Record-Organiser/frmConstructor_Main.vb +++ b/app/DD-Record-Organiser/frmConstructor_Main.vb @@ -2907,7 +2907,7 @@ Public Class frmConstructor_Main Dim str = String.Empty If DT_VWPMO_CONSTRUCTOR_FORMS.Rows.Count >= 3 Then - str &= ACT_EBENE_STRING + str &= System.Text.RegularExpressions.Regex.Replace(ACT_EBENE_STRING, "\s\(\d+\)", "") str &= " - " End If