2013-04-03 61 views
0

我接手了一個Keyboard hook項目,並且一直在對它進行一些修整。它曾經只是4種形式,擁有這4個文件中的所有邏輯和數學。所以很多小時後,我只是把所有的東西都解開後重新組合起來。最新的一點是在主窗口上使用Model-View-Presenter設計理念。我所有的測試都在我的機器上運行良好,自然,程序在目標計算機上的表現應該很好。如何分析ShowDialog?

目標計算機是簡單的x86 Intel Atom處理器,內存爲2gb。他們在鍵盤上有與F13-F18相關的按鈕(這是我的鍵盤鉤子程序進入的地方)。我的開發PC是一款帶8gb內存的半粗六核AMD x64機器。我想要做的一件事是測試一種將這些功能按鈕設置爲特定任務的方法。我所有的單元測試都通過了這部分。當我點擊一個新的任務類型時,它會按需要運行。

「酷」,我說,「讓我們看看它的行動」,所以我打在Visual Studio中運行。我的程序是F9-F12是掛鉤的鑰匙。現在只有當主窗口打開時按下其中一個掛鉤鍵時,分配窗口才會打開。如果該主窗口未打開,則執行該任務。所以我打開我的主窗口,並按F9和Assignment窗口顯示,但我不能點擊任何東西約4秒。然後它「捕捉」起來,做我曾經點擊過的東西。我想也許這是我的調試器,所以我去了bin文件夾,直接運行應用程序和相同的交易。

我想也許這是一個權限的事情,所以我跑作爲管理員和同樣的問題。我想知道在目標計算機上會有多糟糕。我將我的bin文件夾複製到閃存驅動器,將內容複製到Program Files中並運行它。它工作得很好(在一定程度上)但問題不存在。在對話框可見之後,我可以立即選擇任何我想要的任務。

雖然我的鍵盤掛鉤在嘗試重新分配11次後停止工作,但這是一個單獨的問題。所以我想我記得有人說,使用探查器。那麼我的視覺工作室有一個,所以我打開它,但我不能讓頭部或尾部的數據返回。我會發布代碼,但我不知道要發佈什麼。我甚至竟用System.Console.Write(".");圍繞我以爲面積的問題,不過這不是問題

protected override void theHook_RegisteredKeyPressed(System.Windows.Forms.Keys key) 
{ 
    if (TakeOver) 
    { 
     if (!Busy) 
     { 
      busy = true; 
      LibraryTrace.Start("NewKeyAssignment", key); 
      using (var window = new AssignmentTypePanel()) 
      { 
       presenter = new TaskPresenter(window, theList[key].Task); 
       window.Presenter = presenter; 
       //execution will not continue past here until window is closed 
       window.ShowDialog(); 
      } 
      theList[key] = new TaskKey(key, presenter.Task); 
      LibraryTrace.End("NewKeyAssignment", theList[key].Task.ToString()); 
      busy = false; 
     } 
    } 
    else 
    { 
     base.theHook_RegisteredKeyPressed(key); 
    } 
} 

所以我很堅持。我無法弄清楚輸入什麼,要問什麼。有關如何找到此問題根源的任何提示?

+0

以及一個預感我把所有的目標平臺設置爲x86,問題仍然存在..:/該程序有7MB的內存佔用。(即TaskManager表示它只使用7mb),程序本身只有1.1mb。奇怪的是,他們自己如何使所有的部件都能很好地工作,但不是很好的一起 – 2013-04-03 19:55:25

回答

1

我有一個使用winforms開發的應用程序的類似問題 - '服務器端'操作非常迅速,但仍然顯示結果的表單花費了大約5秒鐘的時間。
經過調查,事實證明winforms有一些已知的性能問題。
有一些優化建議(如herehere和我在當時發現的一些其他人,但現在似乎無法找到)。

事實上,他們都沒有幫助我的情況。
我最終意識到真正的瓶頸在於創建和顯示新的表單;我最終做的只是一點點破解 - 我把我的所有控件放在主窗體上,其中一些隱藏起來,並通過隱藏某些控件並顯示其他控件來模擬窗體的更改。
這是相當醜陋的,不會擴大,但在我的情況下工作得很好。

+0

有趣的想法。我覺得很奇怪,我的所有測試都經過這麼多問題。如果我打開一個表單來手動分配一個鍵(從單元測試)它工作得很好。我一直試圖縮小問題所在。我對此很生氣。我想我會在另一個項目上工作一天,看看是否有幫助。 – 2013-04-03 19:45:54