インターフェース分離の原則(ISP)

SOLID の原則というソフトウェア設計・実装をする際に覚えておいた方がいい5つの原則のうち、インターフェース分離の原則(Interface Segregation Principle = ISP)の紹介をしたいと思います。 記事中の実装言語は .NET 8(C#12)です。 ISPの定義 日本語で…

【C#】System.Threading.Lockの使い方とobject lockとの性能比較

.NET 9 から同期的な排他制御用の System.Threading.Lock というクラスが追加されました。 元々存在する lock 構文はそのままに、lock 用に用意していた object などをほぼそのまま置き換えられる上、より高速に動作するということなので使い方の確認と性能…

【C#】R3でスレッドセーフな値変更通知プロパティを実装する

OSSを探してみたのですが (1)プロパティを排他制御で保護しつつ、(2)変更したら通知を緩く出す、のような条件に一致するいい感じのが見つからなかったので自分で作ってみました。 確認環境 Visual Studio 2026 .NET 8 Windows11(マルチプラットフォームは未…

エルゴヒューマンのキャスターを交換してみた

現在2026年の5月で、2020年の11月頃に買って5年半経過したエルゴヒューマンのキャスターが経年劣化か何かで破損したので交換した話です。 ポリウレタンの少し柔らかい部分がボロボロになって割れてしまっています。5つのキャスターのうち1つの片方だけが特に…

【C#】Timerの精度にtimeBeginPeriodが効くのか確認する

System.Threading.Timer クラスで定周期に実行されるコールバックの実行間隔に対して、システムクロック解像度を指定する timeBeginPeriod が影響を与えるかどうかが気になったので検証してみたいと思います。*1 *2 通常だと、Timer の実行間隔を 1msを指定…

【C#】PeriodicTimerの使い方

C#

相当前に C# には 4つの代表的な記事がありますと記事を書きましたが、最近は UI 以外の場所の処理ではすっかり既存のタイマークラス(Timers.Timer や Threading.Timer)を使わなくなり、大半を PeriodicTimer や自作の async なループで定周期処理を実装す…

【C#】Interlockedを使ったDisposeパターンの実装

以前以下のような記事を書いたので、Interlocked を使って Dispose の同時実行性能を少し強化してみたいと思います。 前に書いた記事 ↓↓↓↓ 【C#】Interlockedを使って同時実行数を制限する - PG日誌 確認環境 実装・確認環境は以下の通りです。 .NET8 Visual…

【C#】InterlockedとSpinWaitで排他制御を実装する

少し前に Interlocked を使った排他制御の記事を書きましたがこれと SpinWait という極小時間待機向けの待機機能を使って lock に代わる排他制御処理を実装してみたいと思います。 前に書いた記事はこれ ↓ 【C#】Interlockedを使って同時実行数を制限する - …

【C#】Interlockedを使って同時実行数を制限する

インクリメント・デクリメントの非アトミック性 最初に前置きとして、インクリメントとデクリメントは分割不可能の最小単位の操作(=アトミックな操作)じゃないですよと言う話をしたいと思います。 C#にインクリメント演算子(p++)とデクリメント演算子(…

【C#】デバウンスで短時間に処理が何度も実行されないようにする

よく UI でスライダーで値が変更されたときに発生する値の変更イベントに処理を実装すると、ユーザーがスライダーを変更した時に超高頻度でイベントが発生してそれに伴って処理を実行してしまうと表示にガタつきが発生したりします。なので UI の操作が落ち…

Google検索の余計な表示を削除して検索を快適にする

Google検索っていつの間にか以下の要素で、肝心の「検索結果」が全然見えない or 余計なノイズだらけで情報を「自分で検索」して「サイトに訪問して内容を読み取って取捨選択」したり「情報価値を判断する」という行為の純粋さが凄く下がってると思うんです…

【Win11】タスクバーに任意の項目をピン留めする

元々タスクバーにピン留めできる項目が Windows11 になって大幅に制限されていましたが、なぜか Windows11 25H2 あたりから(?)ショートカットも登録できなくなったようです。 よく使うアプリやファイルをタスクバーに強制的に登録する方法の個人的な手順…