Hi @QuLogic, I think I might have found an issue with this commit. I'm not sure if this is the right forum (or if I should create an issue?). I suspect this commit is causing a memory usage growth, even after running the garbage collector. I've only tested it on Windows 10 with python3.11. Can you reproduce this behavior? Details below.
memory_usage_test.py
import gc
from matplotlib.figure import Figure
from numpy.random import rand
import psutil
def plot(num_points):
fig = Figure()
ax = fig.add_subplot()
ax.plot(rand(num_points))
fig.clear()
def delta_mb_after_plot_and_gc(num_points):
proc = psutil.Process()
before_mb = proc.memory_info().rss / 1e6
plot(num_points)
gc.collect()
after_mb = proc.memory_info().rss / 1e6
delta_mb = after_mb - before_mb
print(f"plotting {num_points} points leaks {delta_mb:.3f} MB")
def main():
gc.disable()
delta_mb_after_plot_and_gc(100_000)
delta_mb_after_plot_and_gc(1_000_000)
delta_mb_after_plot_and_gc(10_000_000)
if __name__ == "__main__":
main()
Running it against this commit and the previous commit (I found this commit via git bisect)
(mpl_venv) PS C:\Users\justi\projects\matplotlib_ref_cycle\matplotlib> git checkout 597554db667344c4c4ad026ec1c6dd5f4c688d8f
HEAD is now at 597554db66 Add a pybind11 type caster for GCAgg and its requirements
(mpl_venv) PS C:\Users\justi\projects\matplotlib_ref_cycle\matplotlib> python ..\memory_usage_test.py
plotting 100000 points leaks 1.978 MB
plotting 1000000 points leaks 16.077 MB
plotting 10000000 points leaks 159.719 MB
(mpl_venv) PS C:\Users\justi\projects\matplotlib_ref_cycle\matplotlib> python ..\memory_usage_test.py
plotting 100000 points leaks 1.970 MB
plotting 1000000 points leaks 16.081 MB
plotting 10000000 points leaks 159.625 MB
(mpl_venv) PS C:\Users\justi\projects\matplotlib_ref_cycle\matplotlib> git checkout a47e26bd8583f0fcacc1dd83c3f2ac39b1f7a091
Previous HEAD position was 597554db66 Add a pybind11 type caster for GCAgg and its requirements
HEAD is now at a47e26bd85 Add a pybind11 type caster for agg::rgba
(mpl_venv) PS C:\Users\justi\projects\matplotlib_ref_cycle\matplotlib> python ..\memory_usage_test.py
plotting 100000 points leaks 0.303 MB
plotting 1000000 points leaks 0.041 MB
plotting 10000000 points leaks -0.279 MB
(mpl_venv) PS C:\Users\justi\projects\matplotlib_ref_cycle\matplotlib> python ..\memory_usage_test.py
plotting 100000 points leaks 0.197 MB
plotting 1000000 points leaks 0.041 MB
plotting 10000000 points leaks -0.311 MB
Environment Details
(mpl_venv) PS C:\Users\justi\projects\matplotlib_ref_cycle\matplotlib> python --version
Python 3.11.9
(mpl_venv) PS C:\Users\justi\projects\matplotlib_ref_cycle\matplotlib> [System.Environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 19045 0
(mpl_venv) PS C:\Users\justi\projects\matplotlib_ref_cycle\matplotlib> pip freeze | findstr matplotlib
-e git+https://github.com/justinjhendrick/matplotlib.git@a47e26bd8583f0fcacc1dd83c3f2ac39b1f7a091#egg=matplotlib
matplotlib-inline==0.1.7
Originally posted by @justinjhendrick in 597554d
Originally posted by @justinjhendrick in 597554d