学習している間はある意味暇な訳だけど、そんな時間もあまり無駄にしたくないので年末年始の連休中は「僕のヒーローアカデミア」の一気見とかしました。まあ、それだけではないですが、アプリのコードの見直しってか最適化を少しやったりしてます。
でもね、これ、はっきり言えばMicrosoftのコンパイラがどんだけタコかって話なんだが、40年程前に当時大型汎用機のFORTRANコンパイラの最適化フェーズ担当だったりしたので、こんなのコンパイラが自動で最適化して当然じゃないの?って話なんだが^^;
例えば、C#でSQLiteからデータ取得する際によくやる
kaisaibi = races.GetDateTime("開催年月日");
ですが、これ、実は
int ordKaisaibi = races.GetOrdinal("開催年月日");
としておいて、
kaisaibi = races.GetDateTime(ordKaisaibi);
とした方が、特にループとかで何度もする場合には効率アップになるそうです。ただね、そんなの態々ユーザーが面倒なコード書かなくともコンパイラが判断してやれば良いだけの話。これ以外でも、C#やまあVisual Basicの時にもよく書いた
Moji += "Sample";
って感じのもの。実はこれも数回程度なら問題ないけど、何十回、何百回となると効率が悪いとの事。
var sb = new StringBuilder(); sb.Clear();
といておいて、
sb.Append("Sample");
というのを繰り返す方が効率がいいらしい。で、出来上がった文字列を最終的に
Moji = sb.ToString();
としてやるのが望ましいとの事で、そんなのを試したりしてます。まあ、確かに早くなった気もします(笑) まあね、無料で提供されているVisual Studio communityではこんなもの? じゃあ、有償のProとかだとこんなの普通にコンパイラが最適化してくれてるのかな?
0 件のコメント:
コメントを投稿