Slide 1

Slide 1 text

Unsafe.BitCast のすゝめ。 . NET Conf 2024 Osaka x Fukuoka 2025/01/11 何縫ねの。

Slide 2

Slide 2 text

何縫ねの。 NTT コミュニケーションズ イノベーションセンター Microsoft MVP for Developer Technologies (2024~) .NET / Web Development nenoNaninu @nenoMake ブログ https://blog.neno.dev その他 https://neno.dev

Slide 3

Slide 3 text

OSS SignalR 周りのいろいろ開発しています •TypedSignalR.Client • C# の SignalR Client を強く型付けするための Source Generator •TypedSignalR.Client.TypeScript • TypeScript の SignalR Client を強く型付けするための .NET Tool / library •TypedSignalR.Client.DevTools • SignalR 向けに Swagger UI 相当の GUI を自動生成する library •AspNetCore.SignalR.OpenTelemetry • SignalR の OpenTelemetry 対応 + log 強化 https://github.com/nenoNaninu

Slide 4

Slide 4 text

C# 13 / .NET 9 関連資料 新機能について語っています…! https://speakerdeck.com/nenonaninu/net-9-noxin-ji-neng-rc-1-shi-dian

Slide 5

Slide 5 text

C# 13 / .NET 9 関連資料 パフォーマンス改善についても語っています…! https://speakerdeck.com/nenonaninu/dot-net-9-nopahuomansugai-shan

Slide 6

Slide 6 text

Unsafe.As 使っていますか?

Slide 7

Slide 7 text

Unsafe.As は危険① サイズの違う値型をキャストした場合、意図しないメモリ領域を読んでしまう

Slide 8

Slide 8 text

Unsafe.As は危険② 参照型をキャストした場合

Slide 9

Slide 9 text

Unsafe.As は使い方を絞れば安全 •メモリレイアウトが同一な構造体 •サイズが同一で参照型を含まない構造体

Slide 10

Slide 10 text

そこで Unsafe.BitCast ですよ

Slide 11

Slide 11 text

Unsafe.As と Unsafe.BitCast

Slide 12

Slide 12 text

Unsafe.BitCast の特徴 •Unsafe.BitCast の型引数として渡せるのは構造体だけ • 構造体でなかったら実行時例外 •キャスト元とキャスト先の構造体のサイズは同一でなければならない • サイズが同一でなければ実行時例外 •パラメータは参照渡しではなく値渡し Unsafe.As より 安全かつパフォーマンスも改善

Slide 13

Slide 13 text

Unsafe.BitCast はいいぞ

Slide 14

Slide 14 text

ブログに書いています https://blog.neno.dev/entry/2025/01/07/182438