2012年1月アーカイブ

ASP.NETでフォームのポストバックを組んでいるときに、ViewStateが復元されない現象が発生。

何をやっても復元してくれない・・・。


2時間ほど格闘した結果、なんとか原因を突き止めました。

例えば、ごく小規模な処理を書くとき、それをインラインで書けばいいのかメソッドにしたほうがいいのか迷う時がある。複数個所から利用する処理ならメソッド化したほうが当然よいのだけど、局所的に使用するものの場合は迷いどころ。

特にそれが繰り返し処理の中で使用する場合は、メソッドにしたときの呼び出しコストが気になる。実際、メソッドによる呼び出しコストはどのくらいなのだろうか・・・。

気になったので、実際に計測してみた。

foreach(VBであればFor Each)ステートメント内では、反復処理しているコレクションの序列を変更してはならない、という暗黙のルールがある。foreachによる反復処理は、IEnumerableインターフェイスとIEnumeratorインターフェイスによって実現している。

IEnumerableインターフェイスはIEnumeratorインターフェイスを返すメソッド GetEnumerator()を定義しているにすぎないので、反復処理の実質的な手続きはIEnumeratorインターフェイスが担っているわけで。。。