Compare commits

...

3 Commits
4.23 ... 4.24

Author SHA1 Message Date
2dust
c29ccf76d5 Update AssemblyInfo.cs 2021-11-17 20:54:40 +08:00
2dust
5907bf388c Speed test via memory storage 2021-11-17 20:54:19 +08:00
2dust
54adaffb92 Optimize performance 2021-11-17 20:52:45 +08:00
5 changed files with 55 additions and 24 deletions

View File

@@ -578,13 +578,11 @@ namespace v2rayN.Forms
{ {
return; return;
} }
for (int k = lvSelecteds.Count - 1; k >= 0; k--)
{ ConfigHandler.RemoveServer(ref config, lvSelecteds);
ConfigHandler.RemoveServer(ref config, lvSelecteds[k]);
}
RefreshServers(); RefreshServers();
LoadV2ray(); LoadV2ray();
} }
private void menuRemoveDuplicateServer_Click(object sender, EventArgs e) private void menuRemoveDuplicateServer_Click(object sender, EventArgs e)

View File

@@ -236,19 +236,27 @@ namespace v2rayN.Handler
/// <param name="config"></param> /// <param name="config"></param>
/// <param name="index"></param> /// <param name="index"></param>
/// <returns></returns> /// <returns></returns>
public static int RemoveServer(ref Config config, int index) public static int RemoveServer(ref Config config, List<int> indexs)
{ {
if (index < 0 || index > config.vmess.Count - 1) var itemId = config.getItemId();
for (int k = indexs.Count - 1; k >= 0; k--)
{ {
return -1; var index = indexs[k];
if (index < 0 || index > config.vmess.Count - 1)
{
continue;
}
config.vmess.RemoveAt(index);
} }
//删除 var index_ = config.vmess.FindIndex(it => it.getItemId() == itemId);
config.vmess.RemoveAt(index); if (index_ >= 0)
{
config.index = index_;
//移除的是活动的 }
if (config.index.Equals(index)) else
{ {
if (config.vmess.Count > 0) if (config.vmess.Count > 0)
{ {
@@ -258,13 +266,8 @@ namespace v2rayN.Handler
{ {
config.index = -1; config.index = -1;
} }
Global.reloadV2ray = true;
}
else if (index < config.index)//移除活动之前的
{
config.index--;
Global.reloadV2ray = true;
} }
Global.reloadV2ray = true;
ToJsonFile(config); ToJsonFile(config);

View File

@@ -62,7 +62,7 @@ namespace v2rayN.Handler
} }
return ws; return ws;
} }
void ws_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) void ws_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{ {
if (UpdateCompleted != null) if (UpdateCompleted != null)
@@ -108,7 +108,7 @@ namespace v2rayN.Handler
if (e.Error == null if (e.Error == null
|| Utils.IsNullOrEmpty(e.Error.ToString())) || Utils.IsNullOrEmpty(e.Error.ToString()))
{ {
((WebClientEx)sender).Dispose();
TimeSpan ts = (DateTime.Now - totalDatetime); TimeSpan ts = (DateTime.Now - totalDatetime);
string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.0")); string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.0"));
UpdateCompleted(this, new ResultEventArgs(true, speed.PadLeft(8, ' '))); UpdateCompleted(this, new ResultEventArgs(true, speed.PadLeft(8, ' ')));
@@ -189,5 +189,34 @@ namespace v2rayN.Handler
} }
} }
public WebClientEx DownloadDataAsync(string url, WebProxy webProxy, int downloadTimeout)
{
WebClientEx ws = new WebClientEx();
try
{
Utils.SetSecurityProtocol();
UpdateCompleted?.Invoke(this, new ResultEventArgs(false, UIRes.I18N("Downloading")));
progressPercentage = -1;
totalBytesToReceive = 0;
DownloadTimeout = downloadTimeout;
if (webProxy != null)
{
ws.Proxy = webProxy;
}
ws.DownloadProgressChanged += ws_DownloadProgressChanged;
ws.DownloadDataCompleted += ws_DownloadFileCompleted;
ws.DownloadDataAsync(new Uri(url));
}
catch (Exception ex)
{
Utils.SaveLog(ex.Message, ex);
Error?.Invoke(this, new ErrorEventArgs(ex));
}
return ws;
}
} }
} }

View File

@@ -220,11 +220,12 @@ namespace v2rayN.Handler
int httpPort = _config.GetLocalPort("speedtest"); int httpPort = _config.GetLocalPort("speedtest");
WebProxy webProxy = new WebProxy(Global.Loopback, httpPort + itemIndex); WebProxy webProxy = new WebProxy(Global.Loopback, httpPort + itemIndex);
var ws = downloadHandle2.DownloadFileAsync(url, webProxy, timeout - 2); var ws = downloadHandle2.DownloadDataAsync(url, webProxy, timeout - 2);
Thread.Sleep(1000 * timeout); Thread.Sleep(1000 * timeout);
ws.CancelAsync(); ws.CancelAsync();
ws.Dispose();
Thread.Sleep(1000 * 2); Thread.Sleep(1000 * 2);
} }

View File

@@ -32,4 +32,4 @@ using System.Runtime.InteropServices;
// 方法是按如下所示使用“*”: // 方法是按如下所示使用“*”:
//[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyVersion("1.0.0")] //[assembly: AssemblyVersion("1.0.0")]
[assembly: AssemblyFileVersion("4.23")] [assembly: AssemblyFileVersion("4.24")]