読者です 読者をやめる 読者になる 読者になる

森理 麟(moririring)のプログラマブログ

ゲームプログラマ森理 麟がのプログラムの話題を中心に書くブログです。

クッキーツイートの高速化 その5 もっとも簡単な高速化 #CookieToEat

←最も簡単と言えば、ご存知ビクトル・ユーゴー。ご存知?

先ずは最も簡単な高速化です。

それは、「ボタンを押した後、押せない状態」にすることです。

そして、処理が終わったら、また「押せる状態」に戻します。

非常に簡単な処理ですが、やってあるのとないのでは雲泥の差が出ます。

private void Button_Click(object sender, EventArgs e)
{
	Button.Enabled = false;	//ボタンを押せない状態にする
	
	//重い処理
	for(int i = 0; i < 10000000; i++);
	
	Button.Enabled = true;	//ボタンを押せる状態に戻す
}


この実装の何よりのメリットはユーザーが「今処理をしていること」が分かることです。

この実装がされていなくて、ボタンを押して10秒後に反応が返る状態を想像してください。

ユーザーは何をしているか分かりません。「ボタンを押せたかどうか」すら分からないのです。

これは高速化うんぬんを抜きにしてもアプリとしては致命的な欠陥だと思います。


さらにこの実装には別のメリットもあります。

処理中は「他の箇所」も処理をさせたくないことがあります。

その条件文に「ボタンを押している状態」かを使えます。

別のフラグがいらないので、ソースとしても分かりやすくなります。

private void ButtonTextBox_TextChanged(object sender, EventArgs e)
{
	if(Button.Enabled == false) return;	//ボタンを押している状態では処理しない
	
	//通常処理
	//………
}


自作アプリでは意外とこの実装をしていないケースがあります。

前回述べたように全てのボタンに入れても良いと思います。

そのボタンに高速で連続で押すような用途でもない限り、特にデメリットはありません。

遅い処理をユーザーに把握してもらわなければ高速化すらできません。