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

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

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

クッキーツイートの高速化 その8 マルチスレッドお手軽コンポーネント #CookieToEat

C# クッキーツイート 高速化

重い処理への対応。マルチスレッド化以外での対応も一応あります。

フォーム全体を再描画する「this.Update();」という命令があります。

これを使えば、強制的に画面を再描画するので、重い処理でも表示を変更できます。

例えばプログレスバーを表示して、進行状況などを描画といったことが可能です。


しかしプログレスバーが正しく進んでも、重い状況自体は改善していません。

一度最小化させたり、他のウィンドウをアクティブにした場合、やはり全体の描画が変になります。

だから、この際重くなる可能性があるようなボタン操作は全てマルチスレッド化するべきです。

しかし、改めて考えても、マルチスレッド化はかなり難しいプログラムです。


デッドロック、スレッドセーフ、クリティカルセクションといった知識も覚える必要があります。

マルチスレッドそのものだけでなく、専用のデバッグといった関連する他の内容も増えます。

シングルスレッドと同じ設計では、正しく動作すらしないので、設計からの変更点も出てきます。

個人的にはマルチスレッドのプログラムフローを想像しにくいというが、大きい問題だと思っています。


しかし、今回のように重い処理を重くしないためのマルチスレッドは、そこまで難しくありません。

コンポーネントを1つ作れば、そいつが殆どの難しい処理をパッケージングしてくれます。

設計も、最初から幾つか意識していれば、そこまで大きく変えなくても、対応出来ます。

そのコンポーネントはBackgroundWorkerです。