From 7b28aa8500641f290334951158fa8973c85ff0c1 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Wed, 4 Jan 2023 10:21:26 +0800 Subject: [PATCH] Optimize traffic statistics --- v2rayN/v2rayN/Handler/LazyConfig.cs | 5 --- v2rayN/v2rayN/Handler/StatisticsHandler.cs | 37 +++++++++++++------ .../v2rayN/ViewModels/MainWindowViewModel.cs | 3 +- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/v2rayN/v2rayN/Handler/LazyConfig.cs b/v2rayN/v2rayN/Handler/LazyConfig.cs index aaf3309b..66d67276 100644 --- a/v2rayN/v2rayN/Handler/LazyConfig.cs +++ b/v2rayN/v2rayN/Handler/LazyConfig.cs @@ -134,11 +134,6 @@ namespace v2rayN.Handler return SqliteHelper.Instance.ExecuteAsync(sql); } - public List ServerStatItems() - { - return SqliteHelper.Instance.Table().ToList(); - } - public List RoutingItems() { return SqliteHelper.Instance.Table().Where(it => it.locked == false).ToList(); diff --git a/v2rayN/v2rayN/Handler/StatisticsHandler.cs b/v2rayN/v2rayN/Handler/StatisticsHandler.cs index 022e5853..c6c61c8d 100644 --- a/v2rayN/v2rayN/Handler/StatisticsHandler.cs +++ b/v2rayN/v2rayN/Handler/StatisticsHandler.cs @@ -14,6 +14,8 @@ namespace v2rayN.Handler private StatsService.StatsServiceClient client_; private bool exitFlag_; private ServerStatItem _serverStatItem; + private List _lstServerStat; + public List ServerStat => _lstServerStat; Action updateFunc_; @@ -83,11 +85,13 @@ namespace v2rayN.Handler GetServerStatItem(config_.indexId); ParseOutput(res.Stat, out ServerSpeedItem server); - _serverStatItem.todayUp += server.proxyUp; - _serverStatItem.todayDown += server.proxyDown; - _serverStatItem.totalUp += server.proxyUp; - _serverStatItem.totalDown += server.proxyDown; - + if (server.proxyUp != 0 || server.proxyDown != 0) + { + _serverStatItem.todayUp += server.proxyUp; + _serverStatItem.todayDown += server.proxyDown; + _serverStatItem.totalUp += server.proxyUp; + _serverStatItem.totalDown += server.proxyDown; + } if (Global.ShowInTaskbar) { server.indexId = config_.indexId; @@ -97,11 +101,6 @@ namespace v2rayN.Handler server.totalDown = _serverStatItem.totalDown; updateFunc_(server); } - if (server.proxyUp != 0 || server.proxyDown != 0) - { - _ = SqliteHelper.Instance.UpdateAsync(_serverStatItem); - } - } } var sleep = config_.statisticsFreshRate < 1 ? 1 : config_.statisticsFreshRate; @@ -118,12 +117,27 @@ namespace v2rayN.Handler { SqliteHelper.Instance.Execute($"delete from ServerStatItem "); _serverStatItem = null; + _lstServerStat = new(); + } + + public void SaveTo() + { + try + { + SqliteHelper.Instance.UpdateAll(_lstServerStat); + } + catch (Exception ex) + { + Utils.SaveLog(ex.Message, ex); + } } private void Init() { long ticks = DateTime.Now.Date.Ticks; SqliteHelper.Instance.Execute($"update ServerStatItem set todayUp = 0,todayDown=0,dateNow={ticks} where dateNow<>{ticks}"); + + _lstServerStat = SqliteHelper.Instance.Table().ToList(); } private void GetServerStatItem(string indexId) @@ -136,7 +150,7 @@ namespace v2rayN.Handler if (_serverStatItem == null) { - _serverStatItem = SqliteHelper.Instance.Table().FirstOrDefault(t => t.indexId == indexId); + _serverStatItem = _lstServerStat.FirstOrDefault(t => t.indexId == indexId); if (_serverStatItem == null) { _serverStatItem = new ServerStatItem @@ -149,6 +163,7 @@ namespace v2rayN.Handler dateNow = ticks }; _ = SqliteHelper.Instance.Replacesync(_serverStatItem); + _lstServerStat.Add(_serverStatItem); } } diff --git a/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs b/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs index 306dbeda..c0db4c85 100644 --- a/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs +++ b/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs @@ -637,6 +637,7 @@ namespace v2rayN.ViewModels SysProxyHandle.UpdateSysProxy(_config, true); } + _statistics?.SaveTo(); _statistics?.Close(); _coreHandler.CoreStop(); @@ -685,7 +686,7 @@ namespace v2rayN.ViewModels List lstServerStat = new(); if (_statistics != null && _statistics.Enable) { - lstServerStat = LazyConfig.Instance.ServerStatItems(); + lstServerStat = _statistics.ServerStat; } lstModel = (from t in lstModel join t2 in lstServerStat