From fdda41d9228acde0f3cd6186bf3aec82374f469f Mon Sep 17 00:00:00 2001 From: madpew Date: Thu, 3 Apr 2014 19:40:16 +0200 Subject: [PATCH] some performance changes --- Forms/CompactWindow.cs | 57 +++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/Forms/CompactWindow.cs b/Forms/CompactWindow.cs index ae918bd..e71068c 100644 --- a/Forms/CompactWindow.cs +++ b/Forms/CompactWindow.cs @@ -14,6 +14,7 @@ namespace BorderlessGaming.Forms { using System.Configuration; using System.Drawing; + using System.Threading; using BorderlessGaming.Properties; @@ -27,7 +28,7 @@ public partial class CompactWindow : Form /// /// list of currently running processes /// - private IEnumerable processCache; + private List processCache = new List(); /// /// The HotKey @@ -67,11 +68,7 @@ private void StartMonitoringFavorites() /// a valid WindowHandle or IntPtr.Zero private IntPtr FindWindowHandle(string processName) { - var process = Process.GetProcesses().FirstOrDefault(p => - p.ProcessName.Equals(processName, StringComparison.InvariantCultureIgnoreCase) && - p.MainWindowHandle != IntPtr.Zero - ); - + var process = Process.GetProcessesByName(processName).FirstOrDefault(p => p.MainWindowHandle != IntPtr.Zero); return process != null ? process.MainWindowHandle : IntPtr.Zero; } @@ -119,17 +116,6 @@ private bool RemoveBorder(IntPtr hWnd) /// private bool RemoveBorderRect(IntPtr targetHandle, Rectangle targetFrame) { - // remove the menu and menuitems and force a redraw - var menuHandle = Native.GetMenu(targetHandle); - var menuItemCount = Native.GetMenuItemCount(menuHandle); - - for (var i = 0; i < menuItemCount; i++) - { - Native.RemoveMenu(menuHandle, 0, MenuFlags.ByPosition | MenuFlags.Remove); - } - - Native.DrawMenuBar(targetHandle); - // check windowstyles var windowStyle = Native.GetWindowLong(targetHandle, WindowLongIndex.Style); @@ -143,6 +129,17 @@ private bool RemoveBorderRect(IntPtr targetHandle, Rectangle targetFrame) // if the windowstyles differ this window hasn't been made borderless yet if (windowStyle != newWindowStyle) { + // remove the menu and menuitems and force a redraw + var menuHandle = Native.GetMenu(targetHandle); + var menuItemCount = Native.GetMenuItemCount(menuHandle); + + for (var i = 0; i < menuItemCount; i++) + { + Native.RemoveMenu(menuHandle, 0, MenuFlags.ByPosition | MenuFlags.Remove); + } + + Native.DrawMenuBar(targetHandle); + // update windowstyle & position Native.SetWindowLong(targetHandle, WindowLongIndex.Style, newWindowStyle); Native.SetWindowPos( @@ -178,24 +175,32 @@ private void AddBorder(IntPtr targetHandle) private void UpdateProcessList() { // update processCache - this.processCache = Process.GetProcesses().Where(process => - !processBlacklist.Contains(process.ProcessName) && - process.MainWindowHandle != IntPtr.Zero - ).Select(process => process.ProcessName); - + var processes = Process.GetProcesses().Where(process => !processBlacklist.Contains(process.ProcessName)); + // prune closed processes for (int i = processList.Items.Count - 1; i > 0; i--) { var process = this.processList.Items[i] as string; - if (!this.processCache.Contains(process)) this.processList.Items.RemoveAt(i); + if (!processes.Any(p => p.ProcessName == process)) + { + this.processList.Items.RemoveAt(i); + this.processCache.Remove(process); + } } // add new processes - foreach (var process in this.processCache) + foreach (var process in processes) { - if (!this.processList.Items.Contains(process)) + if (!this.processList.Items.Contains(process.ProcessName)) { - this.processList.Items.Add(process); + if (process.MainWindowHandle != IntPtr.Zero) + { + this.processList.Items.Add(process.ProcessName); + this.processCache.Add(process.ProcessName); + } + + // getting MainWindowHandle is 'heavy' -> pause a bit to spread the load + Thread.Sleep(10); } } }