我如何描述ShowDialog?

时间:2013-04-03 18:37:03

标签: c# profiling keyboard-hook performance

我接手了一个Keyboard钩子项目,并且已经将它修改了一下。它曾经只是4种形式,拥有这4个文件中的所有逻辑和数学。所以 MANY 小时之后,我只是在解耦所有内容之后将程序重新组合在一起。最新一点是在主窗口上使用Model-View-Presenter设计概念。我的所有测试都在我的机器上运行良好,当然程序在目标计算机上的运行方式也是如此。

目标计算机是简单的x86 Intel Atom处理器,内存为2GB。它们上面有按钮,与键盘上的F13-F18相关(这是我的键盘挂钩程序发挥作用的地方)。我的开发PC是一款半强劲的6核AMD x64机器,内存为8GB。我想做的一件事就是测试一种将这些功能按钮设置为特定任务的方法。我的所有单元测试都通过了这一部分。当我点击新任务类型时,它可以按需运行。

“酷”,我说,“让我们看看它在行动”所以我在Visual Studio中运行。我的程序F9-F12是挂钩的关键。现在只有在主窗口打开时按下其中一个挂钩键时,分配窗口才会打开。如果该主窗口未打开,则执行该任务。所以我打开我的主窗口并点击F9,然后分配窗口显示但是我无法点击任何东西大约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);
   }
}

所以我被卡住了。我无法弄清楚要输入什么,要问什么。关于如何找到这个问题根源的任何提示?

1 个答案:

答案 0 :(得分:1)

我使用winforms开发的应用程序遇到类似的问题 - “服务器端”操作快速闪电,但显示结果的表单仍需要约5秒钟才能显示。
经过调查,结果表明winforms有一些已知的性能问题 有一些优化建议(例如herehere以及我当时发现的其他一些建议但现在似乎无法找到。

实际上,在我的情况下,他们都没有帮助 我最终意识到真正的瓶颈在于创造并展示一种新形式;我最终做的是一个黑客 - 我将所有控件放在主窗体上,其中一些隐藏了,并通过隐藏一些控件和显示其他控件来模拟窗体的更改。
它非常丑陋,不会扩大规模,但在我的情况下效果非常好。