2010/07/24

SetCompatibleTextRenderingDefaultとApplication.EnableVisualStyles()

最近は、GDI+自体が話題になりませんが、Winodws(Desktop)アプリを作成するとき、IDEが勝手に生成してくれます。
Program.csの中を覗くと書かれています。
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
「なんのこと」と質問がありました。
おまじないのように扱われることが多いのですか、理由があっての記述です。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.application.setcompatibletextrenderingdefault.aspx
FrameWork 1.x時代にGDI+が注目され、コントロールのテキスト描画もGDI+で実装されていましだ、パフォーマンスとロケールの問題で不利になり、GDIで描画するために (False) にすることにした経緯があります。

当時のパフォーマンス差を測定したとき、差があったかどうか忘却したので、再度検証してみました。
(*)記憶に残ってないのは、差がなかったからだと思う。



public partial class Form1 : Form
{
string z = "kkkkkkkkkkkk....................kkkkkkkk";
int Max = 20000;
Stopwatch sw = new Stopwatch();
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
sw.Reset();
sw.Start();
for (int i = 0; i < Max; i++)
{
label1.Text = z;
}
sw.Stop();
label2.Text="所要時間["+ sw.ElapsedMilliseconds.ToString() + "]";


}
}

Application.SetCompatibleTextRenderingDefault(false); //GDIモード

Application.SetCompatibleTextRenderingDefault(true); //GDI+モード

で測定したところ、殆ど同じでした。

巷に転がっている情報では「text描画のパフォーマンス向上のため TRUEにする。」となっています。
でも、最近のグラフィック回りが進んだのか、差がでません。なんか説得力に欠けます。
 速度以外にどんな不具合があったのが、資料が見つからないので不明ですが、どんな不具合だったのでしょうね。
これと、同時に生成される、
Application.EnableVisualStyles();
も、「Windows XPスタイルの外観に変更する」ためと説明されてますが、XP自体が過去の物になりつつある昨今では、説明力に欠けます。
「XPスタイルの外観」云々自体に意味がなくなりつつありますし、外してみても差を感じませんでした。
この二つの行は、過去の名残として、おまじない扱いとして残り続けるのでしょうか。

0 件のコメント:

コメントを投稿