chevron_left

メインカテゴリーを選択しなおす

cancel
はなちる
フォロー
住所
未設定
出身
未設定
ブログ村参加

2020/03/05

arrow_drop_down
  • 【Unity】asmdefで"必須パッケージ"と"任意パッケージ"を定義する方法

    はじめに 今回はasmdefで必須パッケージと任意パッケージを定義する方法について紹介をしたいと思います。 任意パッケージのサンプル(左)と必須パッケージのサンプル(右) はじめに その前に やり方 必須パッケージのやり方 任意パッケージのやり方 その前に AssemblyDefinitionFilesってなんだっけと言う方は一度公式ドキュメント等を参照してみてください。docs.unity3d.comまた今回利用する知識は以下の3つ。 references:アセンブリの参照設定 versionDefines:特定のパッケージ(かつ特定バージョン)がある場合にのみシンボル定義を行う defin…

  • 【C#】fixedステートメントを用いてGCによるアドレスの変更を阻止する(GC管理下だとコンパクションの可能性があるため)

    はじめに 今回はfixedステートメントについて書きたいと思います。 はじめに 概要 使い方 参考 概要 GC管理下にあるオブジェクトは、アドレスが最適化のために移動されることがあります。詳細は未確認飛行さんのコンパクションの箇所を読むと良いでしょう。 ufcpp.netunmanagedポインター(参照型変数や参照渡し以外)はコンパクションによるアドレスの変更に対応していないので、アドレスを固定させるという操作が必要になってしまいます。そこで利用するのがfixedステートメントです。 fixed ステートメントを使うと、ガベージ コレクターによる移動可能変数の再配置を防ぎ、その変数へのポイン…

  • 【C#】BitConverter.GetBytesはbyte配列が生成されてしまうので、極力BitConverter.TryWriteBytesを利用してAllocation削減する

    はじめに 今回はBitConverter.GetBytesとBitConverter.TryWriteBytesに焦点をあててAllocationについて書きたいと思います。learn.microsoft.com learn.microsoft.com はじめに 概要 BitConverter.TryWriteBytesを利用する 利用サンプル1 利用サンプル2 参考 概要 指定したデータ(例. int, ulong)をバイト配列に変換する方法としてBitConverter.GetBytesが挙げられます。 public static byte[] GetBytes (bool value);…

  • 【C#】Conditional属性は呼び出し元のシンボル定義を参照するので注意、またその対処法

    はじめに 今回はConditionalAttributeは呼び出し元のシンボル定義を参照していることについて取り上げたいと思います。learn.microsoft.com メソッド呼び出しがスキップされる場合とされない場合 はじめに 概要 気をつけたいこと 対処法 概要 そもそもConditional属性とは?という方もいると思うので公式の説明を載せておきます。 指定した条件付きコンパイル シンボルが定義されていない場合、メソッド呼び出しまたは属性を無視するようコンパイラに指示します。 learn.microsoft.com // 公式サンプル #define CONDITION1 #defi…

  • 【C#】CallerMemberName, CallerFilePath, CallerLineNumberを用いてメソッドの呼び出し元の情報を取得する(メソッド名またはプロパティ名, パス, 行番号)

    はじめに 今回はメソッドの呼び出し元情報を取得できるようになる3つの属性(CallerMemberName・CallerFilePath・CallerLineNumber)を紹介したいと思います。 はじめに 概要 CallerFilePath CallerLineNumber CallerMemberName 使い方 実験 概要 CallerMemberName, CallerFilePath, CallerLineNumberを利用することで、メソッドの呼び出し元の情報を取得することができます。 CallerMemberName : メソッドの呼び出し元のメソッド名またはプロパティ名 Cal…

  • 【C#】Unity.Collections.xxHash3.StreamingStateを利用してデータ少しずつ入力しながらハッシュ値を計算する

    はじめに 前回xxHash3.Hash64とxxHash3.Hash128を紹介したのですが、今回はいくつかのデータをそれぞれ計算した後にハッシュ値を取得できるxxHash3.StreamingStateを紹介したいと思います。 www.hanachiru-blog.com // サンプルコード // 128bits xxHash3.StreamingState streamingState = new xxHash3.StreamingState(isHash64: false); // 対象のデータ NativeArray<byte> array1 = new NativeArray<by…

  • 【C#】Utf8Formatter.TryFormatを用いて一般的なデータ型をUtf8 文字列として書式設定する

    はじめに 今回はUtf8Formatter.TryFormatについて紹介したいと思います。 int value = 999; // e7, 3, 0, 0 Console.WriteLine(string.Join(",", BitConverter.GetBytes(value).Select(x => x.ToString("x")))); // 書き込み先のメモリ領域 Span<byte> destination = new byte[4]; // 一般的なデータ型を Utf8 文字列として書式設定する Utf8Formatter.TryFormat(value, destinatio…

  • 【C#】.NETの内部実装がGitHubで公開されていたので見てみる(Contributeも可)

    はじめに 先日教えていただいたのですが、どうやら.NETの内部実装を見れるGitHubのRepositoryが公開されているらしいです。 This repo contains the code to build the .NET runtime, libraries and shared host (dotnet) installers for all supported platforms, as well as the sources to .NET runtime and libraries. // DeepL翻訳 このレポには、.NETランタイム、ライブラリ、共有ホスト(dotnet)…

  • 【C#】IBufferWriter<T>の使い方・実装の仕方について学んでいく(公式のArrayBufferWriter<T>の内部実装を見ながら)

    はじめに 今回はIBufferWriter<T>の使い方・実装の仕方について書きたいと思います。learn.microsoft.com はじめに IBufferWriterの利用者視点での使い方 IBufferWriterの実装者視点での使い方 応用 File書き込みとかにも利用したい 参考 IBufferWriterの利用者視点での使い方 IBufferWriterは基本的に以下の3ステップで実行していきます。 IBufferWriter<T>.GetSpanかIBufferWriter<T>.GetMemoryを用いて書き込む先のメモリ領域を取得 SpanかMemoryを経由してメモリに書…

  • 【C#】Marshal.AllocHGlobal・NativeMemory.Alloc・NativeMemory.AllocZeroedを利用してアンマネージドメモリを確保する方法

    はじめに 今回はアンマネージドメモリを確保・破棄する方法について以下の3つを紹介したいと思います。 Marshal.AllocHGlobal NativeMemory.Alloc NativeMemory.AllocZeroed はじめに 概要 Marshal.AllocHGlobal Marshal.FreeHGlobal NativeMemory.Alloc NativeMemory.AllocZeroed NativeMemory.Free やり方 概要 NativeMemoryは.NET 6から登場したクラスです。Marshal.AllocHGlobalと内部的には同じ動作になっている…

  • 【Unity】Unity公式のハッシュアルゴリズムxxHash3がCollectionsパッケージに入っているので使ってみる

    はじめに 今回はUnity公式のxxHash3について紹介をしたいと思います。 public void Start() { // unmanagedなHeap確保 NativeArray<byte> input = new NativeArray<byte>(10000, Allocator.Temp, NativeArrayOptions.UninitializedMemory); for (var i = 0; i < input.Length; i++) { input[i] = (byte)(i % 255); } unsafe { // Hash値計算 uint4 hash128 =…

  • 【C#】RuntimeHelpers.IsReferenceOrContainsReferences<T>メソッドを利用して"参照型"か"参照型を含む値型"か調べる

    はじめに 今回はRuntimeHelpers.IsReferenceOrContainsReferences<T>について紹介をしたいと思います。learn.microsoft.com はじめに 概要 使い方 考察 参考 概要 public static bool IsReferenceOrContainsReferences<T> (); 指定された型が参照型であるか、または参照を含む値型であるかを示す値を返します。 learn.microsoft.com 使い方 public static void Main(string[] args) { // True Console.WriteLi…

  • 【C#】C#9.0から導入された静的匿名関数(Static anonymous functions)を利用して状態のキャプチャを禁止する

    はじめに 今回はC#9.0から導入された静的匿名関数(Static anonymous functions)について取り上げたいと思います。 learn.microsoft.com はじめに 概要 参考 概要 ラムダおよび匿名メソッドに対して ' static ' 修飾子を許可します。これにより、含まれるスコープからのローカルまたはインスタンスの状態のキャプチャが禁止されます。 Static anonymous functions - C# 9.0 specification proposals Microsoft Learnstaticをつけることで何か新しいことができるというわけではな…

arrow_drop_down

ブログリーダー」を活用して、はなちるさんをフォローしませんか?

ハンドル名
はなちるさん
ブログタイトル
はなちるのマイノート
フォロー
はなちるのマイノート

にほんブログ村 カテゴリー一覧

商用