diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index 1bd0d0069f..7d99c2ec34 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -92,17 +92,16 @@ namespace Wox.Core.Plugin PluginPair pair = pluginPair; ThreadPool.QueueUserWorkItem(o => { - Stopwatch sw = new Stopwatch(); - sw.Start(); - pair.Plugin.Init(new PluginInitContext + using (var time = new Timeit($"Plugin init: {pair.Metadata.Name}")) { - CurrentPluginMetadata = pair.Metadata, - Proxy = HttpProxy.Instance, - API = API - }); - sw.Stop(); - Debug.WriteLine(string.Format("Plugin init:{0} - {1}", pair.Metadata.Name, sw.ElapsedMilliseconds)); - pair.InitTime = sw.ElapsedMilliseconds; + pair.Plugin.Init(new PluginInitContext + { + CurrentPluginMetadata = pair.Metadata, + Proxy = HttpProxy.Instance, + API = API + }); + pair.InitTime = time.Current; + } InternationalizationManager.Instance.UpdatePluginMetadataTranslations(pair); }); } @@ -168,25 +167,15 @@ namespace Wox.Core.Plugin { try { - Stopwatch sw = new Stopwatch(); - sw.Start(); - List results = pair.Plugin.Query(query) ?? new List(); - results.ForEach(o => + using (var time = new Timeit("Preload programs")) { - o.PluginID = pair.Metadata.ID; - }); - sw.Stop(); - Debug.WriteLine(string.Format("Plugin query: {0} - {1}", pair.Metadata.Name, sw.ElapsedMilliseconds)); - pair.QueryCount += 1; - if (pair.QueryCount == 1) - { - pair.AvgQueryTime = sw.ElapsedMilliseconds; + var results = pair.Plugin.Query(query) ?? new List(); + results.ForEach(o => { o.PluginID = pair.Metadata.ID; }); + var seconds = time.Current; + pair.QueryCount += 1; + pair.AvgQueryTime = pair.QueryCount == 1 ? seconds : (pair.AvgQueryTime + seconds) / 2; + API.PushResults(query, pair.Metadata, results); } - else - { - pair.AvgQueryTime = (pair.AvgQueryTime + sw.ElapsedMilliseconds) / 2; - } - API.PushResults(query, pair.Metadata, results); } catch (System.Exception e) { diff --git a/Wox.Infrastructure/Timeit.cs b/Wox.Infrastructure/Timeit.cs index 7a857bee4b..1e92cd8deb 100644 --- a/Wox.Infrastructure/Timeit.cs +++ b/Wox.Infrastructure/Timeit.cs @@ -1,23 +1,38 @@ using System; +using System.Collections.Generic; using System.Diagnostics; +using Wox.Plugin; namespace Wox.Infrastructure { public class Timeit : IDisposable { - private Stopwatch stopwatch = new Stopwatch(); - private string name; + private readonly Stopwatch _stopwatch = new Stopwatch(); + private readonly string _name; public Timeit(string name) { - this.name = name; - stopwatch.Start(); + _name = name; + _stopwatch.Start(); } + public long Current + { + get + { + _stopwatch.Stop(); + long seconds = _stopwatch.ElapsedMilliseconds; + _stopwatch.Start(); + Debug.WriteLine(_name + ":" + _stopwatch.ElapsedMilliseconds + "ms"); + return seconds; + } + } + + public void Dispose() { - stopwatch.Stop(); - Debug.WriteLine(name + ":" + stopwatch.ElapsedMilliseconds + "ms"); + _stopwatch.Stop(); + Debug.WriteLine(_name + ":" + _stopwatch.ElapsedMilliseconds + "ms"); } } } diff --git a/Wox/ImageLoader/ImageLoader.cs b/Wox/ImageLoader/ImageLoader.cs index 62924c1710..712090a6fe 100644 --- a/Wox/ImageLoader/ImageLoader.cs +++ b/Wox/ImageLoader/ImageLoader.cs @@ -80,50 +80,47 @@ namespace Wox.ImageLoader public static ImageSource Load(string path, bool addToCache = true) { - Stopwatch sw = new Stopwatch(); - sw.Start(); - - if (string.IsNullOrEmpty(path)) return null; - if (addToCache) + using (new Timeit($"Loading image path: {path}")) { - ImageCacheStroage.Instance.Add(path); - } - - ImageSource img = null; - if (imageCache.ContainsKey(path)) - { - img = imageCache[path]; - } - else - { - string ext = Path.GetExtension(path).ToLower(); - - if (path.StartsWith("data:", StringComparison.OrdinalIgnoreCase)) + if (string.IsNullOrEmpty(path)) return null; + if (addToCache) { - img = new BitmapImage(new Uri(path)); - } - else if (selfExts.Contains(ext) && File.Exists(path)) - { - img = GetIcon(path); - } - else if (!string.IsNullOrEmpty(path) && imageExts.Contains(ext) && File.Exists(path)) - { - img = new BitmapImage(new Uri(path)); + ImageCacheStroage.Instance.Add(path); } - - if (img != null && addToCache) + ImageSource img = null; + if (imageCache.ContainsKey(path)) { - if (!imageCache.ContainsKey(path)) + img = imageCache[path]; + } + else + { + string ext = Path.GetExtension(path).ToLower(); + + if (path.StartsWith("data:", StringComparison.OrdinalIgnoreCase)) { - imageCache.Add(path, img); + img = new BitmapImage(new Uri(path)); + } + else if (selfExts.Contains(ext) && File.Exists(path)) + { + img = GetIcon(path); + } + else if (!string.IsNullOrEmpty(path) && imageExts.Contains(ext) && File.Exists(path)) + { + img = new BitmapImage(new Uri(path)); + } + + + if (img != null && addToCache) + { + if (!imageCache.ContainsKey(path)) + { + imageCache.Add(path, img); + } } } + return img; } - - sw.Stop(); - Debug.WriteLine(string.Format("Loading image path: {0} - {1}ms",path,sw.ElapsedMilliseconds)); - return img; } // http://blogs.msdn.com/b/oldnewthing/archive/2011/01/27/10120844.aspx