diff --git a/src/DBMDataRef/DBMDataRef.vb b/src/DBMDataRef/DBMDataRef.vb index d0751d91..3cb8aa5f 100644 --- a/src/DBMDataRef/DBMDataRef.vb +++ b/src/DBMDataRef/DBMDataRef.vb @@ -93,7 +93,7 @@ Namespace Vitens.DynamicBandwidthMonitor Private _lock As New Object ' Object for exclusive lock on critical section. Private _annotations As New SortedDictionary(Of AFTime, Object) - Private Shared _dbm As New DBM(New DBMLoggerAFTrace) + Private _dbm As New DBM(New DBMLoggerAFTrace) Public Shared Function CreateDataPipe As Object diff --git a/src/dbm/DBMDataStore.vb b/src/dbm/DBMDataStore.vb index e5c985c3..c3adcdbf 100644 --- a/src/dbm/DBMDataStore.vb +++ b/src/dbm/DBMDataStore.vb @@ -1,6 +1,6 @@ ' Dynamic Bandwidth Monitor ' Leak detection method implemented in a real-time data historian -' Copyright (C) 2014-2022 J.H. FitiƩ, Vitens N.V. +' Copyright (C) 2014-2025 J.H. FitiƩ, Vitens N.V. ' ' This file is part of DBM. ' @@ -22,6 +22,7 @@ Imports System Imports System.Collections.Generic Imports System.Double Imports System.Threading +Imports Vitens.DynamicBandwidthMonitor.DBMParameters Namespace Vitens.DynamicBandwidthMonitor @@ -30,8 +31,12 @@ Namespace Vitens.DynamicBandwidthMonitor Public Class DBMDataStore + Private Shared ReadOnly MaxDataStoreSize As Integer = + (365+ComparePatterns*7)*24*60*60\CalculationInterval+EMAPreviousPeriods + + Private _lock As New Object ' Object for exclusive lock on critical section. - Private _dataStore As New Dictionary(Of DateTime, Double) ' In-memory data + Private _dataStore As New SortedDictionary(Of DateTime, Double) ' In-mem Public Sub AddData(timestamp As DateTime, data As Object) @@ -46,7 +51,13 @@ Namespace Vitens.DynamicBandwidthMonitor Try If Not _dataStore.ContainsKey(timestamp) Then + + While _dataStore.Count >= MaxDataStoreSize ' Limit size + _dataStore.Remove(_dataStore.Keys.First()) ' Remove oldest + End While + _dataStore.Add(timestamp, DirectCast(data, Double)) + End If Finally