PointとSizeとRectとVectorは業務がら大変高頻度で使うのですが、小さい構造体ながら彼らのIsNaNが馬鹿にならないほど圧迫してきます。とはいっても、10分起動して6億回程度・・・・。 double.IsNaNはRect使用時に2~4回程度、ちょっとした矩形の合成でもや…
古式なC#ですと、ループして、条件を絞り込む書き方が一般的でした。 // 例:1 foreach( var item in Items ) { if( item.Value > 10.0 ) { // 何かの処理 } } いやぁ、懐かしい。 LINQの登場(というか、メソッドチェインとラムダ式の導入)によって書き方…
enumは糖衣構文です。実態はclass Enumです。 このEnumはenumの本分を尽くす限りにおいては高速です。 しかし、C/C++におけるenumとは根本的に異なっており、int等へのキャストは高速なのに、GetHashCode等のクリティカルなシーンにおいて非常に低速な実装を…
WPFに触れたことのある人ならバインディングの便利さを知らぬ人は居ないでしょう。これはその骨にあたる部分の話です。 DependencyObjectを継承したクラスにはDependencyPropertyを使用することができます。これは通常の依存関係プロパティとしてでなく、添…
Canvasにせよ、Gridにせよ、みんなPanel継承しています。 ですから、Childrenに子コントロールを追加していくことになります。ChildrenはUIElementCollectionです。UIElementCollectionの中身を知っておくことは重要です。中身はVisualCollectionなのですが…
IEnumerable<TSource> を返すメソッドだからといって、こんなことをしていると凄い遅いコードが出力されます。 yield return new TSource(); yield return new TSource(); yield return new TSource(); プログラムの大半はループで構成されているのですから、ループが</tsource>…
パネルのうちで極めて自由度が高いといえばCanvasですが、使い込めば使い込むほど中身のことをしっかりと理解しておく必要を感じるはずです。 http://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/Canvas.c…
List<T>の話は具体的なILの話に続いていきます。 ILに変換された後にcallであるかcallvirtであるか、という違いは案外大きいようです。 callである場合、現時点の .NET Frameworkは比較的積極的な最適化を行ってくれます。一方callvirtになる場合の最適化は消極</t>…
困ったことにList<T>を最近使いたくありません。 List<T>の場合.NET Framework 4.5 時点でいまだに for と foreach では、 forが高速に組めます。 コンパイラやJITの最適化が進化すれば同じ速度になるかと思いきや、いつまで経っても foreachの方が遅いのです。 あ</t></t>…
最後にブログを書いていたころのことを思い出すと、あれからずいぶん技術的な点では変化があったなと思います。あの当時は.NET FrameworkにLINQなんてありませんでしたし、DirectXと相互運用できるOSSもありませんでした。WPFもありませんでした。 ただ、C#…