本書は,上流(v1.6 / v1.7)を知っている読者に向けて,各変更について「状況 → 具体的な差分」を 1 まとまりで確認できるようにしたサマリである.クラッシュ修正・メモリリーク修正・性能改善を主軸とし,構造リファクタ・追加機能は末尾に概要のみ示す.
各変更に,該当ファイルへのリンク(クリックでエディタに開く)と,その変更を VS Code の左右差分で開く git difftool コマンドを付けた.リポジトリさえあればどのマシン・どの OS でも動く(GitHub 不要・埋め込みリンクなし).
初回だけ VS Code を差分ツールに設定する(全リポジトリ共通):
git config --global diff.tool vscode git config --global difftool.vscode.cmd 'code --wait --diff "$LOCAL" "$REMOTE"'
git difftool -y <SHA>^ <SHA> -- <path>: そのコミットで当該ファイルが変更前 ↔ 変更後でどう変わったかを VS Code の左右差分で開く.git show <SHA> -- <path> でも可._shots スレッドセーフ化)_shots(List<Mat>)を無保護共有し,容量拡張時のリサイズ競合・TOCTOU が原因.BlockingCollection に置換し,撮影/保存間を安全化.git difftool -y 5df961c^ 5df961c -- TIASshot/Cameras/CameraBase.csConvertImage 中間 Mat 解放)ColorCorrector.ConvertImage の中間 Mat(flatten/extended/converted/convertedImage)が未解放で数十 GB 積み上がり OOM.IScam 17ch × 複数フレームを高速に回すとファイナライザ回収が追いつかない.using で確定解放.git difftool -y 0003cc2^ 0003cc2 -- TIASshot/ColorCorrection/ColorCorrector.cs_bmps[] をコールバックスレッドで Dispose する.入力 bmp を直接 picDisplay.Image に載せると UI の OnPaint と別スレッド同時アクセスでクラッシュしうる(v1.6 からの潜在バグ).Form1.ShowImage)と入力供給側(IScam が自分の ToBitmap を破棄)**に入る(Lucam.cs 自体は不変).ShowImage のフルコピー Bitmap が毎フレームリーク(原因1),表示バッファの取りこぼしフレーム未 Dispose(原因2),PreviewMonitor.UpdateImage の上書き前未 Dispose(原因3).撮影しなくても蓄積する.git difftool -y 252cde3^ 252cde3 -- TIASshot/UI/Form1.csgit difftool -y 252cde3^ 252cde3 -- TIASshot/UI/PreviewMonitor.csInvalidate() 洪水で Form1 が常時 WM_PAINT 保留になり,同一 UI スレッドの副モニタが描画飢餓(sub_paint_fps≈2〜3).Invalidate() を全廃し,両プレビューを ≒30fps の UI タイマー駆動に統一.git difftool -y 252cde3^ 252cde3 -- TIASshot/UI/Form1.csnew Bitmap(bmp)(32bppARGB 変換を伴う GDI+ 経路で ~46ms)が律速で実効 FPS が頭打ち.LockBits+RtlMoveMemory で行単位コピーする FastClone に置換(所有権・スレッド安全性は不変).FastClone 本体は新規 Utils/BitmapUtil.cs.git difftool -y 609baf6^ 609baf6 -- TIASshot/UI/Form1.csgit difftool -y 609baf6^ 609baf6 -- TIASshot/Utils/BitmapUtil.cs3 バージョンを実機で同一プロトコル計測した比較(詳細は TEST_02).保存経路のメモリは v1.6→v1.7 で上流が改善済み,プレビュー経路は v1.7→現行で本フォークが改善した.
| 指標 | v1.6 | v1.7 | 現行 |
|---|---|---|---|
メモリ private 包絡線 | ~200→834 MB 上昇 | ~200→700 MB 上昇 | ~180〜200 MB で平坦 |
| フレームコピー時間 | ~46 ms | ~45 ms | ~2.6 ms |
| コールバック実効 FPS | ~17 | ~17 | ~30 |
| 副モニタ描画 FPS | ~3(飢餓) | ~3(飢餓) | ~19 |
→ v1.6/v1.7 のプレビュー指標が一致するのは,プレビュー経路が v1.7 まで未修正だったため.
主軸ではないが,あわせて入った変更.差分は git difftool -y <SHA>^ <SHA>(パス省略でそのコミットの全変更ファイルを順に開く)や git show <SHA> で辿れる.
Cameras/・ColorCorrection/・ChartDetection/・UI/・Utils/ に再編し,IScam/Lucam の重複フローをテンプレートメソッドに集約(挙動不変).e278f27(Phase1)ほか,8a00494(テンプレートメソッド化).WHITEBOARD ビルド限定・2854dba)とメモリ観測ツール(MEMMONITOR ビルド限定・243ddeb).いずれも配布ビルドには含めない(ENV_06).git log --oneline/ファイル単位の履歴: git log -p -- <path>