ネコのために鐘は鳴る

寺院に住み着くパソコ〇好き

(C#) ラムダ式による this のキャプチャ

ラムダ式による外部変数のキャプチャは、コンパイラによって暗黙的に匿名クラスが作られ、コールされるたびに匿名クラスのインスタンスがnewされるため、ヒープアロケーションが発生する。 using System; public class Class { public Action Method(int num…

(雑記) int の範囲チェック速度 小ネタ

int型の整数の引数の範囲チェックで、0 から Size の範囲外だったら例外を投げる、のような範囲チェックはする機会が多いが、 int valueとint Sizeに対して if(value < 0 || value >= Size) throw new ArgumentOutOfRangeException(); よりも if((uint)value…

(C# 雑記) Linq の Count() と IReadOnlyCollection<T>

Linq のCount()、つまりint Enumerable.Count(IEnumerable<T>)は原理的には全列挙による数え上げだが、配列ライクなものは初めから要素数を持っているのでO(N)を回す必要はない。そのため、配列ライクなものについては直接要素数を取るよう最適化が施されている</t>…

(C#) 共変性による参照型配列のパフォーマンス

C# の配列は共変性 (covariance) があり、以下のコードはコンパイルできます。 object[] array = new int[10]; array[2] = 5; そして困ったことに、次のコードもコンパイルできます。 object[] array = new int[10]; array[2] = "hello"; // ← 代入できる!…

(C#) 参照型インスタンスのアドレスを取得する

C# では unsafe キーワードを使うことで値型のポインタや、unmanaged型配列の配列要素へのポインタを取得できますが、 参照型インスタンスへのポインタは取得できません。ガベージコレクション (GC) によるコンパクションでアドレスが移動する可能性があり、…

(雑記) xorshiftって0出ないよね

疑似乱数生成アルゴリズムの Xorshift を実装してみて思ったんですが、これって何回生成しても0は出てこないですよね。 Xorshift のアルゴリズムは元論文見るのが早いです。すごい短いし。解説サイトだとこのページが丁寧。 要約すると、32bit版はこれです。…

(C#) ReadOnlyCollection<T> を Unsafe.As で違法に書き換える

System.Runtime.CompilerServices.Unsafe クラス System.Runtime.CompilerServices.Unsafeクラスは C# において safe なコンテキストで unsafe なことができる、.NET の標準ライブラリにある公式黒魔術書です。Unsafeという名前から明らかですが、safe で使…

(C#) 配列の for の JIT 最適化処理

[前提] C# のコンパイルと JIT コンパイル C# --> [コンパイル] --> IL -> [JIT] --> バイナリ の流れを知ってる人は読み飛ばしてください forの最適化の話をする前に、C#のソースコードが実行可能バイナリ (アセンブリ) にコンパイルされるまでの流れをおさ…

(C#) string で発生するガベージを抑える (String Interning)

C# においてstringは参照型で、そのインスタンスはヒープメモリに生成されます。 当然、参照されなくなったstringは次回のガベージコレクションで回収されます。 少しでもガベージは減らしたいものですが、文字列は生成するたびに同じ内容でも別インスタンス…

(C#) 知らぬ間に起こるstructのboxingを回避する

この記事の要点 自分でobjectにキャストしなくてもboxingは起こるよ structは等価比較を実装しないとパフォーマンスが落ちますよー ボックス化 (boxing) とは C# には値型と参照型があり、structは値型です。値型のオブジェクトは参照型のメンバ変数である場…

(C#) 同期コンテキストと Task, async/await その2

この記事は前回の記事の続き、および補足です。 前回記事 (C#) 同期コンテキストと Task, async/await - ネコのために鐘は鳴る UI スレッドへの復帰コスト 前回の記事で上げた GUI ループでのキューの監視は、ループごとにキューにコールバックがPostされて…

(C#) 同期コンテキストと Task, async/await

.NET framework 4 で追加されたTaskおよび .NET framework 4.5 で追加されたasync, awaitキーワードによって、C# の非同期処理は非常にに簡単になりました。 Windows Form, WPF, UWP, Unity など各種フレームワーク上の場合、非同期処理はスレッドやコールバ…

大学院受験の感想

ただの日記です。 この日記執筆時点では大学院受かりました、とはまだ断言できないのですがまあ受かりました 積極的に人に言わないだけで別に隠していることでもないですが、去年も同じところの大学院を受けました。なんとまぁ去年も大学院に受かりました。2…

解けない15パズル

15パズルってご存知ですか? 知ってても知らなくても15パズルの話をするんですが。はい。 あと、本記事は数学的な厳密な証明はせずに感覚的にエイッヤッ~とやっているので正確じゃないです。 でもたぶんあってる。はい。 これ 簡単に言いますと、1マス空い…

(C#) コレクションのカプセル化

コレクションの保護 クラスの不十分なカプセル化としてよく見られるのがコレクションです。 以下の例は、カプセル化されていないコレクションの例です。 public static class Database { public static Person[] People { get; private set; } } public clas…

カプセル化とは何か

カプセル化とはオブジェクト指向の根幹をなす考え方です。カプセル化について考えて見ましょう。(本記事はC#をベースに考えていますが、カプセル化自体はオブジェクト指向言語全般に関して共通することでしょう) カプセル化とAPI 自販機を例に考えてみましょ…

.NET CoreでNugetパッケージのdllをビルド出力する

.NET CoreでNugetのパッケージのdllはデフォルトではビルド出力にコピーされないし、 Visual Studio上から設定で出力するように設定変更もできない(たぶん)(何故) [2020/6/29 追記] この記事の内容は.net core 2.x 時代の話で、.net core 3.0 からはdllがデ…

.NETとマルチプラットフォーム

C#でマルチプラットフォームなアプリケーションを作りたかった時に、調べたことを自分用メモとしてまとめました。 たまには違う言語も書いたら? C#の実行環境 C#はIL(中間言語;Intermediate Language)にコンパイルされ、仮想環境上で動くコンパイル系言語で…

(備忘録)C++でOpenGL使う時に調べた用語まとめ

C++素人がC++でOpenGLで遊びたいなと思った時に出てきた用語をまとめた。 知っていた単語、聞いたことはあるが理解していなかった単語、知らなかった単語もあるが、 備忘録として関連してそうなワードを独断と偏見でまとめてみた。 間違いや勘違いがあれば教…

(C#)Enumの要素に表示名をつける ~ローカライズ編~

前回の記事の続きです 前回はEnumDisplayName属性に定数リテラル文字列を与えることはできましたが、 リソースから値を割りつけることができませんでした。これでは多言語化する時に困ります。 [AttributeUsage(AttributeTargets.Field)] public class EnumD…

C#5でもnameofしたい

結論 前置きが長いと結論を早く知りたいマンにボコられるので、 まずはタイトルに対する結論から。 using System; using System.Linq.Expressions; public static class GetName { public static string Of<MemberType>(Expression<Func<MemberType>> expression) { return (expression.Bo</func<membertype></membertype>…

(C#) Enumの要素に表示名をつける

やりたいこと Enumのフィールド名と表示名を分離したい。 最終的な目標として、Sushi.Takoというenumを表示する文字として"タコ"を割り当てたい。かつ汎用性のある構造にしたい。多言語によるローカライズにも対応したい。今回はそういうお話です。 2019/2/2…

DependencyPropertyとBindingについて

DependencyPropertyとは何か WPFにおけるBindingの根幹をなす依存関係プロパティ(DependencyProperty)について書いておこうと思います。 まず、DependencyPropertyとは何かというと、一言で言うとBindingができるプロパティのことです。 より正確に言うと、B…

MVVMで始めるWPF生活

はじめに 皆さんはラーメンは何で食べますか?いえ、そうではなく、WPFとはいったい何でしょうか?正式にはWindows Presentation Foundationといい、Windows Formに代わる新しいWindowsにおけるGUIアプリケーションのプラットフォームであり、登場は2006年。…

ターミナルで擬似動画再生

お久しぶりです.更新頻度が半端なく低く,もはや誰のためのブログなのかわからないですね.でも更新します.楽しいので さて本日のテーマはターミナルで動画を再生したい的な何かです.ハッキリ言ってn番煎じです.世の中にはそういうものがすでに存在しま…

VOICEROID +EX をwindows10にうまくインストールできない

windows10にVOICEROID +EXをインストール時に「ライセンス認証ドライバをインストールしています」で止まる問題

ブログ始めました

初めまして、いこりと申します。 以前からブログというものを書いてみたいなと思っていたのですが、どうにも最初の一歩を踏み出せないままズルズルと時間が経っていました。 関西のとある大学で大学生をやっています。趣味は工作やプログラミング、その他い…