我的程序与API交互,执行计算,并使用信息构建Gui,其中一些信息存储在本地文件中(以保存登录之间的信息)。使用cProfile配置我的代码时,我得到以下输出:
C:\Users\cheek\Documents\Code\LoL-Performance-Tracker>python -m cProfile -s tottime LoL-Performance-Tracker.py
LoL-Performance-Tracker.py:271: SyntaxWarning: name 'apiKey' is used prior to global declaration
global apiKey
Entered buildMatchHistory
262880 function calls (261634 primitive calls) in 11.867 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
161 8.684 0.054 8.684 0.054 decoder.py:370(raw_decode)
1 1.100 1.100 1.100 1.100 {question}
1 0.694 0.694 1.794 1.794 {built-in method exec_}
1 0.506 0.506 9.848 9.848 LoL-Performance-Tracker.py:88(buildMatchHistory)
168 0.361 0.002 0.361 0.002 {method 'read' of 'file' objects}
84 0.073 0.001 0.149 0.002 ConfigParser.py:464(_read)
1 0.040 0.040 11.867 11.867 LoL-Performance-Tracker.py:7(<module>)
80 0.035 0.000 9.323 0.117 MatchHistoryBuilder.py:37(buildMatch)
161 0.026 0.000 9.074 0.056 __init__.py:258(load)
251 0.025 0.000 0.025 0.000 {open}
1 0.023 0.023 0.023 0.023 {built-in method show}
23338 0.019 0.000 0.019 0.000 {method 'match' of '_sre.SRE_Pattern' objects}
23176 0.017 0.000 0.017 0.000 collections.py:59(__setitem__)
2 0.016 0.008 0.016 0.008 {built-in method setWidget}
84 0.010 0.000 0.010 0.000 {built-in method setStyleSheet}
11844 0.008 0.000 0.008 0.000 {method 'readline' of 'file' objects}
1 0.006 0.006 11.704 11.704 LoL-Performance-Tracker.py:326(main)
...
buildMatchHistory方法是我认为会出现问题的方法,因为它构建gui对象并且通常非常麻烦,但它似乎并不是。
我使用json编码器/解码器来执行具有大量信息的文件I / O.我不认为执行这些操作需要几秒钟,但看起来确实如此。我对这个输出的理解是否正确?如果没有,我应该在哪里看?
如果我是对的,那么在登录之间提取和存储信息的更好解决方案是什么?
答案 0 :(得分:1)
cProfile看起来真的很酷,但你曾经使用过性能监视器吗?如果您正在运行Windows,它将附带一个名为&#34; Perfmon&#34;的应用程序。如果您启动此应用程序,您可以通过使用性能计数器监控几乎所有性能问题(PF并不重要)。 这可以帮助您找到瓶颈。我将引导您完成磁盘使用方法。这是它的工作原理......
打开应用程序并左键单击&#34;性能监视器&#34;在监视工具文件夹下。右键单击图表,然后单击&#34;添加计数器...&#34;。您将看到一个窗口。
如果向下导航到PhysicalDisk,则可以为磁盘读取和磁盘写入百分比添加计数器。添加这些计数器后,您可以在图表上监控磁盘使用情况。
注意:您可以将此策略应用于任何性能问题!
如果您的磁盘使用率很低,那么I / O可能不是问题。
您的cProfile似乎认为&#34;解码器&#34;为#34; tottime&#34;做出了很多贡献。尝试检查处理器,看它是否以100%运行。如果是,也许您可以简化解码器,或将这些计算卸载到GPU。
如果您的磁盘通过USB连接,您也可以监控USB性能。
我看到&#34;登录&#34;在你的帖子中。也许有一些东西打电话给在线资源。尝试监控网络。
也许你没有足够的内存,请查看。
如果所有其他方法都失败,您可以使用此方法逐个程序地消除可能的瓶颈。我希望你能找到自己的瓶颈,并期待看到别人的想法。