Windows 7でPython 3.4を実行すると、Gio.MemoryInputStreamの終了機能はメモリを解放しません。テストコードは、次のとおりGio.MemoryInputStreamは、閉じたときにメモリを解放しません。
from gi.repository import Gio
import os, psutil
process = psutil.Process(os.getpid())
for i in range (1,10) :
input_stream = Gio.MemoryInputStream.new_from_data(b"x" * 10**7)
x = input_stream.close_async(2)
y = int(process.memory_info().rss/10**6) # Get the size of memory used by the program
print (x, y)
この戻り:
True 25
True 35
True 45
True 55
True 65
True 75
True 85
True 95
True 105
これはクローズ関数がtrueを返した場合でも、各ループに、メモリ10のMBのプログラム増加で使用することを示しています。 Streamが閉じられたら、どのようにメモリを解放することができますか?
もう1つの良い解決策は、ストリームを再利用することです。しかし、set_dataまたはreplace_dataは、次のエラーを発生させます。 'データアクセスメソッドはサポートされていません。代わりに、通常のPython属性を使用してください ' いいですが、どのプロパティ?
私はPython 3.4でメモリにストリームが必要です。私はPyPDF2を使ってPdfファイルを作成してから、それをPopplerでプレビューしたいと思います。 Poppler(Has anyone been able to use poppler new_from_data in python?参照)のバグのため、new_from_data関数を使用することはできず、new_from_stream関数を使用したいと考えています。