Autor Thema: Tabellenerstellung wird immer langsamer  (Gelesen 3801 mal)

Offline der busse

  • Frischling
  • *
  • Beiträge: 43
Tabellenerstellung wird immer langsamer
« am: 17.11.16 - 15:17:37 »
Moin,

ich habe eine Tabelle im Notes erstellen wollen. Klappt auch soweit, wird aber elendig langsam...
Falls eine Deklaration nicht dabei war, so liegt es daran, daß ich die Sachen aus einer größeren Lib gezogen habe.


' GetThread constants
Const DB_LSI_THREAD_LINE=0'Current line
Const DB_LSI_THREAD_PROC=1'Current procedure name
Const DB_LSI_THREAD_MODULE=2'Current module name
Const DB_LSI_THREAD_VERSION=3'LS version
Const DB_LSI_THREAD_LANGUAGE=4'language setting
Const DB_LSI_THREAD_COUNTRY=5'region setting
Const DB_LSI_THREAD_TICKS=6'Current clock ticks
Const DB_LSI_THREAD_TICKS_PER_SEC=7'Current clock ticks per second
Const DB_LSI_THREAD_PROCESS_ID=8'Current process ID
Const DB_LSI_THREAD_TASK_ID=9'Current task ID
Const DB_LSI_THREAD_CALLPROC=10'Calling procedure name
Const DB_LSI_THREAD_CALLMODULE=11'Calling module name


Function MyTabTest()
   On Error GoTo label_Error
   
   Dim array As Variant, a As Integer, Out As String, Ret As Variant, DocName As String
   Dim doc As NotesDocument, RTItem As NotesRichTextItem, Header As Variant, l As Integer, UI_Doc As NotesUIDocument
   Dim RTNav As  NotesRichTextNavigator, rtTable As NotesRichTextTable, Success As Boolean
   
   Dim Start As Long
   Start = DB_TimerInit()
         
   Set Doc = DB_ConsoleCreateDoc("Testrun")
   Set RTItem = Doc.GetFirstItem("Body")
   
   Header = Split("7|Das|ist|nur|ein|Test|3|2", "|")
   
   Set rtnav = RTItem.CreateNavigator
      
   Call RTItem.AppendTable(1, 7)
   Set rtTable= rtNav.GetFirstElement(RTELEM_TYPE_TABLE)
   Call rtnav.FindFirstElement(RTELEM_TYPE_TABLECELL)
   For a=1 To 7
      Call rtitem.BeginInsert(rtnav)
      Call RTItem.AppendText(header(a))
      Call RTItem.EndInsert
      Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
   Next
      
   ReDim Ret(0 To 8)
   Ret(1) = ""
   Ret(2) = ""
   Ret(3) = ""
   Ret(4) = 3
   Ret(5) = 2
         
   For a=1 To 600
            
      If rttable.RowCount = 255 Then' Tables can only have 255 rows...
         Call RTItem.AppendTable(1, 7)
         Set rtTable= rtNav.GetNextElement(RTELEM_TYPE_TABLE)
      End If
                  
      rttable.AddRow
      Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
      Call rtitem.BeginInsert(rtnav)
      Call RTItem.AppendText("Test")
      Call RTItem.EndInsert
      Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
      Call rtitem.BeginInsert(rtnav)
      Call RTItem.AppendText(DB_TimerDiff(Start))
      Call RTItem.EndInsert
      
      For l=1 To 5
         Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
         Call rtitem.BeginInsert(rtnav)
         Call RTItem.AppendText(Ret(l))
         Call RTItem.EndInsert
      Next
   Next
   
   Success = Doc.Save(False, False)
   Set UI_Doc = DB_UI.EditDocument( True , Doc)
   Doc.Remove(True)

   Exit Function
   
label_Error:
   MessageBox Error & " [Code: " & Err & " - Line: " & Erl & "] ", DB_MB_OK + DB_MB_IconStop, "Func:" & GetThreadInfo(1)& " Called By: " & GetThreadInfo(10)
   End
End Function

Function DB_TimerDiff(p_Init As Long) As String
   Dim lTicksStop   As Long
   Dim lTicksperSec As Long
   
   lTicksStop   = GetThreadInfo(DB_LSI_THREAD_TICKS)
   lTicksperSec = GetThreadInfo(DB_LSI_THREAD_TICKS_PER_SEC)

   DB_TimerDiff=(lTicksStop - p_Init) / lTicksperSec
End Function

Function DB_TimerInit() As Long
   DB_TimerInit = GetThreadInfo(DB_LSI_THREAD_TICKS)
End Function



Ich habe also die Tabelle erstellen lassen und die Anzeige der Zeit gemessen.
Die ersten 10 Zeilen zeigen alle 0,15 Sekunden, dann 4 mit 0,31, 4 mit 0.62 und es geht konstant bergab.
Bei Zeile 62 ist eine Sekunde durch, 80 2 Sekunden, 200 erst bei 30 Sekunden. 600 Zeilen dauert 360 Sekunden.

Irgendwas macht also entweder die Suche nach dem nächsten Element sehr langsam...
Ist das so, gibt es besseren Code oder habe ich da einen Bug eingebaut?
« Letzte Änderung: 18.11.16 - 15:33:20 von der busse »

Offline it898ur

  • Senior Mitglied
  • ****
  • Beiträge: 478
Re: Tabellenerstellung wird immer langsamer
« Antwort #1 am: 18.11.16 - 08:05:29 »
Hallo,

dieses Verhalten kann ich bestätigen. In meinem Fall war es dann schneller alle 35 Zeilen eine neue Tabelle zu erstellen (sieht auch besser im Ausdruck aus).

Gruß

André

Offline Flachmann

  • Senior Mitglied
  • ****
  • Beiträge: 284
  • Geschlecht: Männlich
  • Mal wieder: Flachmann ist Schuld!
Re: Tabellenerstellung wird immer langsamer
« Antwort #2 am: 18.11.16 - 09:07:55 »
Die Tabellenverarbeitung in Notes ist wirklich sehr langsam. I.a. ist es besser viele kleine Tabellen, statt weniger Große, zu haben.

Wenn die vielen Tabellen dann aber "wie eine" wirken sollen, also alle die selben Spaltenbreiten haben sollen, hat man den Nachteil, dass man jede Tabelle einzeln anpassen muss. Ist also Abwägungssache. Bei einer programmatischen Erstellung der Tabellen lässt sich das Breitenproblem ja bestens an zentraler Stelle anpassen.

Zum Glück hat man ja diese Riesentabellen nicht so häufig.
Gruß,
  __________
  _/_
  /lachmann

Offline der busse

  • Frischling
  • *
  • Beiträge: 43
Re: Tabellenerstellung wird immer langsamer
« Antwort #3 am: 18.11.16 - 11:54:54 »
Ok.
Ich habe mal einen Test gemacht und die Zahlen sehen bei kleiner Tabellen deutlich besser aus...

Ich habe beim Ändern des RowCount von 255 z.B. auf 5, 10 usw. gesetzt, also
If rttable.RowCount = 5 Then

5 = 1.4 Sekunden
10 = 2.8 Sekunden
20 = 4.5 Sekunden
30 = 7.7 Sekunden
50 = 11 Sekunden

Das ist ein herber Unterschied für die gleiche Anzahl an Zeilen. Ich habe den Eindruck, der geht nicht wie bei GetNextDocument oder so vor und fängt einfach bei jeder gesuchten Zelle wieder vorne an.

Weiß jemand, wie ich die Zeilen zwischen den neuen Tabellen weg bekomme?


_____|
Also das die Zeile hier...
_____
         |


Die Entfernen-Taste will nicht helfen, ich kann aber Texte rein schreiben.
Falls nicht, würde ich halt die Überschrift in eine eigene Tabelle auslagern und immer Blöcke a 10 Zeilen machen, das ist dann noch halbwegs sinnvoll von der Aufteilung und schnell.

If a=1 or rttable.RowCount = 10 Then' Tables can only have 255 rows...
         Call RTItem.AppendTable(1, 7)
         Set rtTable= rtNav.GetNextElement(RTELEM_TYPE_TABLE)
      Else
         rttable.AddRow   
      End If


Sonst schon mal danke bis hierhin.

Offline Flachmann

  • Senior Mitglied
  • ****
  • Beiträge: 284
  • Geschlecht: Männlich
  • Mal wieder: Flachmann ist Schuld!
Re: Tabellenerstellung wird immer langsamer
« Antwort #4 am: 18.11.16 - 12:29:03 »
Eine Zeile muss ja als Trenner bleiben. Vielleicht wenn es geht über Hide-When verstecken oder die Schrift ganz klein machen, so dass man die Zeile fast nicht sieht (1px).
Gruß,
  __________
  _/_
  /lachmann

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Tabellenerstellung wird immer langsamer
« Antwort #5 am: 18.11.16 - 12:31:04 »
Das Erstellen deiner Tabellen, passiert das durch eine Nutzer-Aktion im Notes-Client?
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline der busse

  • Frischling
  • *
  • Beiträge: 43
Re: Tabellenerstellung wird immer langsamer
« Antwort #6 am: 18.11.16 - 12:40:47 »
Ich schraube im Moment für mich eine Ausgabe in Tabellenform für einige Auswertungen ala welcher Benutzer hat was (eingestellt).
So als Hilfe für mich. Ich klicke auf eine Schaltfläche und der Client erstellt die Tabellen.

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Tabellenerstellung wird immer langsamer
« Antwort #7 am: 18.11.16 - 12:46:01 »
Dann kannst du die Tabelle auch in einer HTML-Datei erstellen und diese zum Schluss in ein Richtext importieren. Damit gehen sehr große Tabellen sehr schnell, mit CSS können Formatierungen durchgeführt werden ...
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline der busse

  • Frischling
  • *
  • Beiträge: 43
Re: Tabellenerstellung wird immer langsamer
« Antwort #8 am: 18.11.16 - 15:32:52 »
Importieren? Aha. Wenn der Workaround klappt... mal sehen.  ;)

Offline thkn777

  • Aktives Mitglied
  • ***
  • Beiträge: 176
Re: Tabellenerstellung wird immer langsamer
« Antwort #9 am: 18.11.16 - 16:02:46 »
Idee: exportiere die Daten nach Excel. Tabellen dürfen da sehr groß werden und leidlich fix ist es auch.

Schönes WE wünsch' ich,
Th.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz