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
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?