Auslesen von Archivwerten (lange Ausleszeiten)
Moin,
wir haben ein Archiv mit 2000 Datenpunkte, wo täglich um 0 Uhr ein Wert gespeichert wird. Das Archiv wird in ARX-Datein gespeichert.
Über ein Addin wollen wir immer die letzten 31 Werte auslesen und weiter verarbeiten. Hierbei kommt es zu langen Wartezeiten (mehrere Minuten).
Folgend der Ausschnitt zum Auslesen der Archivdaten. Alleine das Programm benötigt schon sehr lange und ist eigentlich entsprechend der Hilfe programmiert.
Wenn man die Funktion Archiv Exportieren ausführt und in eine CSV-Datei exportieren lässt, sind die Daten innerhalb einer Sekunde (7MB Dateigröße) vorhanden. Gibt es eine Möglichkeit den Zugriff zu beschleunigen?
- Dim zArv As IRuntimeArchive = Nothing
Dim zarvVar As IRuntimeArchiveFilterVariable = Nothing
' Zuweisung des Archivs für die Zählerdaten
zArv = main.RuntimeArchiveCollection.Item("XYZ")
' Nur ausführen, wenn es das Archiv gibt
If Not zArv Is Nothing Then
' Erstellung eines neuen Archivfilters
Dim zArv_Filter As IRuntimeArchiveFilter = zArv.FilterCollection.Create
' Hinzufügen der Variablen aus dem Archiv zum Filter
For i = 0 To zArv.VariableCollection.Count - 1
zArv_Filter.AddVariable(zArv.VariableCollection.Item(i))
Next
' Setzen der Startzeit im UTC-Zeitformat als Integer Wert. Weiterhin ist die Beachtung der Sommer / Winterzeit notwendig
zArv_Filter.EndTime = Zeit.System2Zenon(Sommer_Winter_Zeit(DateTime.Now))
zArv_Filter.StartTime = Zeit.System2Zenon(Sommer_Winter_Zeit(DateTime.Now.AddDays(-30)))
' Nach den Variablen filtern
Dim zarv_FilterVars As IRuntimeArchiveFilterVariableCollection = zArv_Filter.Query
Dim AnzahlVars As Integer = zarv_FilterVars.Count
' Durchlaufen der gefilterten Archivvariablen
For j = 0 To AnzahlVars - 1
' Zuweisung der Archivvariable
zarvVar = zarv_FilterVars.Item(j)
' Erstellung einer Collection für die Archivwert
zarvVar.ArchiveValueCollection.Create()
Dim AnzahlValues As Integer = zarvVar.ArchiveValueCollection.Count
' Durchlaufen der Archivwerte für die aktuelle Archivvariable. Es werden immer die letzten 30 Tage (31 Werte) gefiltert
For i = 0 To AnzahlValues - 2
' Speicherung des Datumstempel, der anschließend noch einmal für die verschiedenen Dateiformate bearbeitet werden muss
Dim zArvValue As IRuntimeArchiveValue = zarvVar.ArchiveValueCollection.Item(i)
Next
Next
End If