主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

IronPythonとガベージコレクションのモジュールgc

                
 ガベージコレクション。そのまま日本語にするとゴミ集めとでもいうところか。プログラミングにおいては、使われなくなったメモリ領域を自動で割り出し、また使えるようにする機能だ。近年人気を増している軽量言語などで実装されている。CやC++では未実装で、自分でメモリ管理をしなければならない。メモリを食うような処理を書いた場合、適宜それを解放してやらないとメモリリークを起こして処理が続行できなくなる。Pythonを使っているあいだはメモリリークにぶち当たらなかったが、IronPythonでスクリーンキャプチャをしてディスプレイに表示というのを繰り返していたら突如ぶち当たった。

http://www.ironpython.info/index.php/Screen_Capture
↑にあるスクリプトを、スクリーンをキャプチャし続けるものに書き換えた。そうしたら実行後に、数秒経過するとプログラムが中断するようになった。タスクマネージャで確認したところ、どんどんメモリ使用量が増えていたのでメモリ解放が行われていないのではと疑った。なのでガベージコレクションを行うモジュールgcをインポートし、繰り返し部分にgc.collect()を挿入することで問題は解決した。http://ironpython-test.readthedocs.org/en/latest/library/gc.html

import clr

clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

from System.Drawing import Bitmap, Graphics, Point, Size
from System.Windows.Forms import (
Application, Button, Form, FormWindowState,
PictureBox, Screen, Timer
)

import gc

class Main(Form):
def __init__(self):
self.Text = "Capture Screen"
self.ClientSize = Size(290, 288)

self.pb = PictureBox()
self.pb.Location = Point(0, 0)
self.pb.Size = Size(100, 50)
self.Controls.Add(self.pb)

timer = Timer()
timer.Interval = 66
timer.Tick += self.onTick
timer.Start()

# cmdcapture = Button()
# cmdcapture.Text = "Capture Screen"
# cmdcapture.Location = Point(169, 249)
# cmdcapture.Size = Size(110, 30)
# cmdcapture.Click += self.cmdcaptureclicked
# self.Controls.Add(cmdcapture)



def onTick(self, sender, event):
gc.collect()
self.bmp = Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
self.g = Graphics.FromImage(self.bmp)
self.g.CopyFromScreen(100, 100, 0, 0, Size(500, 500))
self.g.Dispose()

self.pb.Image = self.bmp
self.pb.Size = self.bmp.Size


def main():
main = Main()
Application.Run(main)


if __name__ == "__main__":
main()
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。