我认为我的程序受到文件I/O的限制,我需要一个更好的解决方案

2024-09-27 23:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我的程序与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,其中包含大量信息。我不认为执行这些操作需要几秒钟,但看起来确实如此。我对这个输出的理解正确吗?如果没有,我应该去哪里?在

如果我是对的,在登录之间提取和存储信息有什么更好的解决方案?在


Tags: 文件ofinpy信息objectsperformancetracker
1条回答
网友
1楼 · 发布于 2024-09-27 23:20:32

尝试使用PerfMon

cProfile看起来真的很酷,但是你用过性能监视器吗?如果您运行的是windows,它将附带一个名为“Perfmon”的应用程序。如果您打开这个应用程序,您可以通过使用性能计数器来监视几乎所有的性能问题(PF并不重要)。这真的可以帮助您找到瓶颈。我将指导您如何使用磁盘。下面是它的工作原理。。。在

打开应用程序,左键单击“监视工具”文件夹下的“性能监视器”。右键单击图形并单击“添加计数器…”。你将看到一扇窗户。在

enter image description here

如果向下导航到PhysicalDisk,则可以添加磁盘读写百分比计数器。添加这些计数器后,可以在图表上监视磁盘使用情况。在

注意:您可以将此策略应用于您遇到的任何性能问题!

解决你的问题

如果磁盘使用率低,那么I/O可能不是问题。在

你的cProfile似乎认为“解码器”对“tottime”贡献很大。试着检查你的处理器,看看它是否在100%运行。如果是的话,也许你可以简化解码器,或者把这些计算转移到GPU上。在

如果您的磁盘是通过USB连接的,那么您也可以监视USB的性能。在

我在你的帖子里看到了“登录”。也许有什么东西在打电话给在线资源。尝试监视网络。在

也许你没有足够的内存,看看吧。在

如果其他方法都失败了,您可以使用此方法在程序上逐个消除可能的瓶颈。祝你好运,找到你的瓶颈,并期待着看到别人的想法。在

相关问题 更多 >

    热门问题