はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

C#

【C#】TypeがKeyなDictionaryをStatic Type Cachingに置き換えて処理の高速化させる(実験付き)

C#

はじめに 今回はTypeをKeyにとるDictionaryをStatic Type Cachingに変えて処理を高速化させる方法について紹介したいと思います。Static Type Cachingについては以下のスライドのp46~触れられています。 www.slideshare.net はじめに 概要 バイナリサイズを…

【GCP, C#】Google Cloud Functions(.NET) + Cloud Scheduler + Cloud Pub/Subを用いてSlack通知ツールを作る

はじめに 今回はGoogle Cloud Functions(.NET) + Cloud Scheduler + Cloud Pub/Subを用いて定期的にSlackにメッセージを投稿するシステムを作ってみようと思います。 実際に動作させている様子 はじめに 概要 Slackでの操作 Slackアプリを作成する GCPでの操…

【C#】噂のMD5が同じになる72文字で1文字しか変わらない文字列が本当か試してみる

C#

はじめに Xを見ていたら以下のような投稿を見かけました。Here is a 72-byte alphanum MD5 collision with 1-byte difference for fun: md5("TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak")=md5("TEXTCOLLBYfGiJUETHQ4hEcKSMd…

【C#】BenchmarkDotNetを用いて処理速度・メモリ確保量を計測する

C#

はじめに 今回はBenchmarkDotNetというライブラリを利用して処理速度・メモリ使用量を計測する方法を紹介したいと思います。github.com はじめに 概要 インストール 使い方 1. classを用意 2. Benchmark属性をつけたメソッド定義 3. BenchmarkRunner.Runを行…

【C#】.NETでGoogle Cloud Functionsを作成してデプロイをする方法メモ

はじめに 今回はGoogle Cloud Functionsに.NETを利用した関数をデプロイする方法について書きたいと思います。内容的には以下の公式ドキュメントをミックスした感じです。 cloud.google.com cloud.google.com codelabs.developers.google.com先に書いておく…

【C#】StringBuilderとDefaultInterpolatedStringHandlerの処理速度・メモリ確保量を比べてみる

C#

はじめに 今回はStringBuilderとDefaultInterpolatedStringHandlerの処理速度・メモリ確保量を比べてみたいと思います。learn.microsoft.comlearn.microsoft.com大抵のStringBuilderの利用シーン、new StringBuilderの代わりにnew DefaultInterpolatedString…

【C#】ThreadStaticを利用してスレッドによって異なるインスタンスが生成される静的フィールドを作成する

C#

はじめに 今回はThreadStaticを利用してスレッドによって異なるインスタンスが生成される静的フィールドを作成する方法を紹介したいと思います。learn.microsoft.com はじめに やり方 初期値をつけてはダメ staticでないフィールドはダメ やり方 [ThreadStat…

【C#】string.FormatとDefaultInterpolatedStringHandlerで処理速度・GC.Allocの差を計測してみる(string.Formatはボックス化の可能性あり)

C#

はじめに 今回はstring.FormatとDefaultInterpolatedStringHandlerで処理速度・Allocationの優劣を調べてみようと思います。learn.microsoft.comlearn.microsoft.com結論から言うとDefaultInterpolatedStringHandlerが優秀です。(C#10から補完文字列(interpo…

【C#】.NET CLIの"dotnet tool restore"と".config/dotnet-tools.json"でローカルで使用するツールのバージョンを固定する(t4のバージョンをプロジェクトごとに固定したり)

C#

はじめに 今回はdotnet tool restoreとdotnet-tools.jsonを用いて"現在のディレクトリとサブディレクトリ"で使用するツールのバージョンを固定する方法を紹介したいと思います。↓ マニフェストファイル(.config/dotnet-tools.json)のサンプル { "version": 1…

【C#】System.Text.JsonのJsonNodeを用いてスキーマレスなJsonにプロパティを追加する方法

C#

はじめに 今回はSystem.Text.JsonでスキーマレスなJsonに対してプロパティを追加する方法を紹介したいと思います。learn.microsoft.com はじめに やり方 参考 やり方 JsonDocumentは読み取り専用なので、JsonDocumentではなくJsonNodeを用いることで容易に実…

【Blazor】BlazorでASP.NET Coreを使用した最初のWebアプリをビルドする公式ドキュメントを読んだメモ①

はじめに ふと興味本位でBlazorを触ってみようと思い、以下の公式のラーニングパスをやってみてます。 learn.microsoft.comそのときに学んだことをメモがてらに残しておきたいと思います。正直自分宛のメモなので、気になる方は公式のものをみてください。 …

【Unity】Unity公式パッケージ「Code Coverage」を利用してTest Frameworkのコードカバレッジを計測する

はじめに 今回はUnity公式パッケージであるCode Coverageを利用してTest Frameworkで実行したテストのコードカバレッジを計測する方法を紹介したいと思います。docs.unity3d.com 実際に生成したレポート はじめに Code Coverageとは 概要 環境 インストール…

【C#】MS製のLoggingライブラリである「Microsoft.Extensions.Logging」の基礎的な使い方

C#

はじめに 前回messagetemplates-csharpというMessageTemplateを扱えるようにするライブラリを紹介しました。www.hanachiru-blog.com今回はMS製のMicrosoft.Extensions.LoggingというLoggingライブラリについて紹介したいと思います。(Microsoft.Extensions.L…

【C#】「messagetemplates-csharp」を用いてC#でMessageTemplateを扱う

C#

はじめに 今回はmessagetemplates-csharpというC#用のMessageTemplateライブラリを紹介したいと思います。github.com はじめに 概要 MessageTemplateとは より詳細の設定 messagetemplates-csharp 概要 インストール方法 利用方法 詳細な仕様 さいごに 概要 …

【C#】C#7より追加された型によるswitch と C#8より追加された複数の値をまとめてswitchする 機能について

C#

はじめに 今回はC#7より追加された型によるswitch と C#8より追加された複数の値をまとめのswitchについて取り上げたいと思います。 はじめに 概要 型スイッチ 複数の値をまとめてswitchする 概要 型スイッチ C#7より型によるswitchができるようになりました…

【C#】Dictionary.Addとインデクサーによる要素の追加で挙動がどう異なるか(重複するキーの場合にArgumentExceptionか上書き)

C#

はじめに Dictionaryに要素を加える際に、Dictionary.Addとインデクサーによる要素追加で少し挙動が異なります。 Dictionary<string, int> dictionary = new Dictionary<string, int>(); // Dictionary<TKey,TValue>.Add(TKey, TValue) // 既存のキーを指定した場合にはエラー(System.ArgumentExcept</tkey,tvalue></string,></string,>…

【Unity】Unity Test Frameworkで特定の例外がスローされることをAssertする方法(Assert.Throws, Assert.Catch, Throws.TypeOf, Throws.InstanceOf)

はじめに 今回はUnity Test Frameworkでエラーのテストをする方法について紹介したいと思います。docs.nunit.org はじめに Assert.Throws Assert.Catch Assert.Thatを利用する 小ネタ Assert.Throws Assert.Throwsを利用することで特定の例外がスローされる…

【Unity】System.Text.Json v8.0.1をUnityで動かすまでの手順

はじめに 今回はSystem.Text.Jsonのv8.0.1をUnityで動作させる手順について紹介したいと思います。またSystem.Text.JsonをUnityの型に対応させる記事を前に書いたので、気になる方はそちらもチェックしてみてください。 engineering.dena.com はじめに その…

【Unity】Unityが利用しているMicrosoft.CodeAnalysis.CSharpのバージョンの確認方法(Mac)

はじめに 今回はUnityが利用しているMicrosoft.CodeAnalysis.CSharpのバージョンの確認方法を紹介したいと思います。Roslyn AnalyzerやSource Generatorを利用する場合はMicrosoft.CodeAnalysis.CSharpのバージョンによって利用できるバージョンが異なるため…

【C#】パフォーマンス・バイナリサイズともに優れたシリアライザー「MessagePack for C#」の基礎的な使い方

C#

はじめに 今回はC#用のMessagePackシリアライザーであるMessagePack for C#の基礎的な使い方を紹介したいと思います。github.com はじめに 概要 環境 インストール方法 使い方 Keyのインデックスについて 配列かマップ(辞書)か シリアライズの前・デシリアラ…

【C#】Google.ProtoBufを利用してProtocol Buffersを扱う方法

C#

はじめに 先日protobuf-netの利用方法についての記事を書いたのですが、今回はGoogle製のライブラリGoogle.ProtoBugの利用方法について書きたいと思います。www.nuget.org github.com protobuf.dev はじめに 概要 サポート 環境 インストール方法 おまけ : R…

【C#】protobuf-netという非公式ライブラリを利用してProtocolBuffersを扱う方法

C#

はじめに 今回はprotobuf-netというライブラリを利用して.NET上でprotocol buffersを扱う方法を紹介したいと思います。www.nuget.org github.com はじめに 概要 サポートされているバージョン 環境 インストール方法 Riderプラグインの導入 使い方 .protoを…

【C#, Unity】Test FrameworkにてType判定するときのIs.TypeOfとIs.InstanceOfの挙動の違いについて

はじめに 今回はNUnit.Framework.Is.TypeOfとNUnit.Framework.Is.InstanceOfで挙動が異なることについて書きたいと思います。 private abstract class HogeBase { } private class Hoge : HogeBase { } [Test] public void SampleTestSimplePasses() { Hoge …

【Unity】gree/unity-webviewを用いてUnityでWebViewを実装する

はじめに 今回はgree/unity-webviewというgreeがOSSとして公開しているWebViewをUnityアプリ上で表示するプラグインを紹介します。 unity-webview is a plugin for Unity 5 that overlays WebView components on Unity view. // DeepL翻訳 unity-webviewはUn…

【Unity】Debug.Logはもう古い!? Unity公式のLoggingパッケージ「Unity Logging」の使い方まとめ

はじめに これはUnity Advent Calendar 2023の15日目の記事です。 qiita.com この記事ではUnity公式のLoggingパッケージであるUnity Loggingを紹介したいと思います。 はじめに 概要 導入 環境 基本的な使い方 LogLevel ログ出力 Default Configure Custom C…

【C#】インクリメントを筆頭にした値の増減をInterlockedを用いてマルチスレッドに対応する

C#

はじめに 実はマルチスレッドでは値のインクリメントは正しく動作しない可能性があります。 // 正しく動作しない再現 const int Count = 100; var tks = new Task[Count]; var semaphore = new SemaphoreSlim(0, Count); var value = 0; // SemaphoreSlimを…

【C#】C#12から登場したInterceptorsを利用してコンパイル時に実行するメソッドを置き換える(主にSourceGeneratorと組み合わせる)

C#

はじめに C#12から登場したInterceptorsというコンパイル時に実行するメソッドを置き換えられる機能について紹介したいと思います。github.comただしまだ実験的な機能なので、変更される可能性もありますし情報もまだそこまで出てきていません。注意してくだ…

【C#】System.Text.Jsonの「JsonDocumentとJsonElement」を利用して固定したSchemaがないJsonに対してデシリアライズを行う方法

C#

はじめに 今回はSystem.Text.Jsonを用いてSchemaが変わる可能性があるようなJsonをデシリアライズする方法について紹介したいと思います。www.nuget.org↓利用される場面 逆シリアル化する型がない 受信した JSON に固定スキーマがなく、含まれている内容を確…

【C#】System.Text.Jsonで直接UTF-8バイト配列にシリアライズ & UTF-8バイト配列からデシリアライズする方法

C#

はじめに 今回はSystem.Text.Jsonを利用して直接UTF-8バイト配列にシリアライズ & UTF-8バイト配列からデシリアライズする方法を紹介したいと思います。また公式ドキュメントには文字列ベースのメソッド(UTF-16)を使用するよりもUTF-8バイト配列のシリアル化…

【C#】GenericのFullNameを実際のコードに埋め込みできるよう変換する方法(T4の実行時テンプレート, Raw String Literal)

C#

はじめに 例えばRaw String Literal(もしくはT4の実行時テンプレート)を利用して、.csの生成をしようとします。 using System.Text; namespace SampleConsole { internal class Program { public static void Main() { // C#11より登場した生文字列リテラル …