From 820b8d53c3b1adac3093fc66bf8ded0746a6dace Mon Sep 17 00:00:00 2001 From: PeratX <1215714524@qq.com> Date: Mon, 1 May 2017 16:19:15 +0800 Subject: [PATCH] Added port cache, improved efficiency for getPort --- .../daedalus/activity/MainActivity.java | 1 - .../daedalus/fragment/AboutFragment.java | 2 -- .../daedalus/fragment/DnsTestFragment.java | 7 ++--- .../daedalus/service/DaedalusVpnService.java | 4 +-- .../daedalus/util/DnsServerHelper.java | 27 +++++++++++++------ 5 files changed, 23 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/org/itxtech/daedalus/activity/MainActivity.java b/app/src/main/java/org/itxtech/daedalus/activity/MainActivity.java index 8170d2b..3429f98 100644 --- a/app/src/main/java/org/itxtech/daedalus/activity/MainActivity.java +++ b/app/src/main/java/org/itxtech/daedalus/activity/MainActivity.java @@ -272,7 +272,6 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On mAbout = null; mHosts = null; instance = null; - System.gc(); } @Override diff --git a/app/src/main/java/org/itxtech/daedalus/fragment/AboutFragment.java b/app/src/main/java/org/itxtech/daedalus/fragment/AboutFragment.java index 260fb26..184a70c 100644 --- a/app/src/main/java/org/itxtech/daedalus/fragment/AboutFragment.java +++ b/app/src/main/java/org/itxtech/daedalus/fragment/AboutFragment.java @@ -90,7 +90,5 @@ public class AboutFragment extends Fragment { mWebView.destroy(); mWebView = null; } - - System.gc(); } } diff --git a/app/src/main/java/org/itxtech/daedalus/fragment/DnsTestFragment.java b/app/src/main/java/org/itxtech/daedalus/fragment/DnsTestFragment.java index d3915e1..e471fd8 100644 --- a/app/src/main/java/org/itxtech/daedalus/fragment/DnsTestFragment.java +++ b/app/src/main/java/org/itxtech/daedalus/fragment/DnsTestFragment.java @@ -25,6 +25,7 @@ import org.itxtech.daedalus.util.DnsServerHelper; import java.net.InetAddress; import java.util.ArrayList; +import java.util.Arrays; import java.util.Random; import java.util.Set; @@ -73,9 +74,7 @@ public class DnsTestFragment extends Fragment { add(DnsServerHelper.getAddressByDescription(Daedalus.getInstance(), spinnerServerChoice.getSelectedItem().toString())); String servers = Daedalus.getPrefs().getString("dns_test_servers", ""); if (!servers.equals("")) { - for (String server : servers.split(",")) { - add(server); - } + addAll(Arrays.asList(servers.split(","))); } }}; DNSClient client = new DNSClient(null); @@ -164,8 +163,6 @@ public class DnsTestFragment extends Fragment { mRunnable = null; mHandler.shutdown(); mHandler = null; - - System.gc(); } private static void stopThread() { diff --git a/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java b/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java index e33ed3b..aee5fb4 100644 --- a/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java +++ b/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java @@ -121,6 +121,7 @@ public class DaedalusVpnService extends VpnService implements Runnable { } Daedalus.initHostsResolver(); + DnsServerHelper.buildPortCache(); dnsQueryTimes = 0; if (this.mThread == null) { @@ -181,8 +182,7 @@ public class DaedalusVpnService extends VpnService implements Runnable { dnsQueryTimes = 0; HostsResolver.clean(); - - System.gc(); + DnsServerHelper.cleanPortCache(); } diff --git a/app/src/main/java/org/itxtech/daedalus/util/DnsServerHelper.java b/app/src/main/java/org/itxtech/daedalus/util/DnsServerHelper.java index 2139288..61eee35 100644 --- a/app/src/main/java/org/itxtech/daedalus/util/DnsServerHelper.java +++ b/app/src/main/java/org/itxtech/daedalus/util/DnsServerHelper.java @@ -5,6 +5,7 @@ import org.itxtech.daedalus.Daedalus; import java.net.InetAddress; import java.util.ArrayList; +import java.util.HashMap; /** * Daedalus Project @@ -17,19 +18,29 @@ import java.util.ArrayList; * the Free Software Foundation, version 3. */ public class DnsServerHelper { - public static int getPortOrDefault(InetAddress address, int defaultPort) { - String hostAddress = address.getHostAddress(); + private static HashMap portCache = null; + public static void cleanPortCache() { + portCache = null; + } + + public static void buildPortCache() { + portCache = new HashMap<>(); for (DnsServer server : Daedalus.DNS_SERVERS) { - if (server.getAddress().equals(hostAddress)) { - return server.getPort(); - } + portCache.put(server.getAddress(), server.getPort()); } for (CustomDnsServer server : Daedalus.configurations.getCustomDnsServers()) { - if (server.getAddress().equals(hostAddress)) { - return server.getPort(); - } + portCache.put(server.getAddress(), server.getPort()); + } + + } + + public static int getPortOrDefault(InetAddress address, int defaultPort) { + String hostAddress = address.getHostAddress(); + + if (portCache.containsKey(hostAddress)) { + return portCache.get(hostAddress); } return defaultPort;