より複雑な問題に取り組みながら、ローカル変数とメンバー変数のアクセス速度を比較するようになりました。
ここにテストプログラムがあります:
#!/usr/bin/env python
MAX=40000000
class StressTestMember(object):
def __init__(self):
self.m = 0
def do_work(self):
self.m += 1
self.m *= 2
class StressTestLocal(object):
def __init__(self):
pass
def do_work(self):
m = 0
m += 1
m *= 2
# LOCAL access test
for i in range(MAX):
StressTestLocal().do_work()
# MEMBER access test
for i in range(MAX):
StressTestMember().do_work()
StressTestMember
繰り返しごとにインスタンス化するのは悪い考えのように見えるかもしれませんがStressTestLocal
、これらが基本的にアクティブレコードであるモデル化されたプログラムでは理にかなっています。
簡単なベンチマークの後、
- ローカル アクセス テスト: 0m22.836
- MEMBER アクセステスト: 0m32.648s
ローカル バージョンは、クラスの一部でありながら最大 33% 高速です。なんで?