如何基于配置文件优化应用程序的性能?

| 我已经分析了我的应用程序,发现不是我的功能导致了我看到的延迟,而是Winform函数。我该如何纠正?有关说明,请参见: 这是分析的结果:     
已邀请:
您无法解决该问题。 该框架正在调用Windows API公开的
DispatchMessage
函数,该函数用于将通过调用
GetMessage
函数获取的消息分派给特定窗口的窗口过程。 Windows的“慢”部分是Windows本身。当这成为瓶颈时,您的应用程序已得到充分优化,您无能为力。 此外,这些配置文件结果不一定告诉您此功能运行缓慢。而是,他们告诉您它被称为很多(\“命中计数\”)。这个想法是,被大量调用的函数是代码中的“热点”,值得花一些额外的时间来优化它们的实现(付出更多的努力)。不过,在这种情况下,该函数被称为很多,因为Windows是处理应用程序消息的方式。在非托管代码和本机Windows API的世界中,消息有点像您在.NET代码中使用的事件。由于必须引发一个事件才能发生任何有趣的事情,因此负责调用或调度这些事件(消息)的函数必然会被调用很多。     
Windows应用程序通常包含一个顶级循环,在其中等待外部事件(例如鼠标移动/点击和键盘点击)或内部生成的事件。当事件发生时,它会调用适当的处理程序,该处理程序可能做的很少或很多。通常情况下,它会走很宽的深度调用树,但是如果快速完成,它将回到等待状态。 表现良好的应用正在花费大部分时间,等待下一个外部事件。 表现不佳的应用程序花费了大部分时间来响应事件。 改善其性能的方法是找到瓶颈并将其消除。瓶颈几乎总是由调用树中的函数调用(在您的代码中)组成,而您并不知道这些调用是昂贵的。调用树中不在代码中的部分是您无能为力的事情,但是如果可以避免调用它们,则有机会获得加速。 就像您是一位经理,试图查看您的员工是否在浪费时间一样,您可以不加通知地看看他们在做什么。 在软件中,这就是您可以执行的操作。 要小心分析器,这些分析器会使您感到困惑,例如:1)告诉您例程的“自我时间”; 2)告诉您函数被调用了多少次; 3)给了您一个庞大但几乎不相关的图或表,或者4 )很多有趣但通常不相关的线索,例如缓存未命中和线程切换。 查找瓶颈非常容易,因为如果它们很小,那么它们并不是真正的瓶颈;如果它们很大,那么在浪费的时间里,它们就在堆栈中,只是在等您注意。 这是该主题的更多内容。     

要回复问题请先登录注册