サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
annulusgames.com
今回はC# Advent Calendar 2024の20日目の記事です。テーマは文字列の最適化について。 C#において文字列を表現するstring型はクラスであり、生成のたびにヒープにアロケーションを行うためパフォーマンス低下の要因になりがちです。また、C#のstringの中身は歴史的経緯からUTF-16となっており、UTF-8を直接扱うことができないため、変換の際に余計なオーバーヘッドが発生してしまいます。 そのため、近年の.NETではSpan等を活用して効率的な文字列操作を行うAPIが多数追加されています。また、UTF-8を扱うための機能も色々と用意されています。 そこで今回の記事では、最新の.NET9を用いて文字列操作を最適化する手法を紹介していきます。普段から簡単に使える手法も多いので、是非とも覚えておきましょう。
【C#】Random Extensions – .NET / Unity用の乱数ライブラリC#2024年8月26日2024年8月26日 .NET / Unity向けに新たな擬似乱数ライブラリ「Random Extensions」を作成しました!いつも通りOSSとしてGithubに公開しています。 .NETで擬似乱数を扱いたい場合、多くの場合はSystem.Randomクラスを使用することになります。が、このクラスは歴史的経緯もあり、内部実装や設計が混沌としたことになっています。(シードを指定するか否かで生成アルゴリズムが違う、実装ミスにより周期が保証されない、絶妙に抽象化層として役に立たないRandomクラスと謎のRandom.ImplBase、etc…) また、Unityで乱数を扱う場合はUnityEngine.Randomが用いられますが、こちらも古くからあるクラスなので、色々と設計上
今回の記事はasync/awaitについて。 C#に限らず、現在では多くのプログラミング言語が非同期処理を扱う言語機能としてasync/awaitを採用しています。現在の.NETでも至る所にasync/awaitが使われており、避けて通ることはできない重要な機能となっています。 そこで今回は、C#における非同期処理とasync/await、またC#8.0で導入された非同期ストリームとIAsyncEnumerable<T>について、基本的な使い方を解説していきます。 また、記事の後半では実際にasync/awaitがどのように動作しているかをコンパイル結果を通して説明していきます。この辺りはやや高度なトピックになるため読み飛ばしていただいても構いませんが、async/awaitをより深く理解したい方は是非そちらも読んでみてください。 同期処理 / 非同期処理 async/awaitに関する話
今回の記事はC#のSpan<T>とMemory<T>について。 現代のC#ではパフォーマンス向上のためにSpanが用いられる機会が非常に多くなっています。.NETでも多くのAPIがSpan<T>を受け入れるようになってきており、パフォーマンスに気を遣ってコードを書く場面ではもはやSpanの活用は必須と言えます。 また、C#ではSpanとは別に似たような型としてMemory<T>も存在しています。こちらは利用する上での制約がSpanと比べて少なく、Spanの代替として主にasyncメソッド内で用いられることが多いです。 そこで今回は、Span<T>やMemory<T>の利用方法や使い分け、またMemory<T>を適切に扱うための指針やIMemoryOwner<T>による所有権の管理についてまでをまとめていきたいと思います。基本的にはSpan<T>の利用のみで事足りますが、Memory<T>が
今回の記事はDependency Injection(依存性の注入)について。 設計についての学習を始めると「依存性の逆転」「Dependency Injection(依存性の注入)」「DIコンテナ」など言葉を耳にする機会が増えてくると思います。適切にDIを扱えるようになると設計の柔軟性が飛躍的に向上するため、是非とも習得したい知識です。 今回は「そもそもDependency Injection(依存性の注入)とは何なのか」という話から始め、サービスロケータやDIコンテナについてまで解説していきたいと思います。 またこの記事ではSOLID原則(特に依存性の逆転)等の知識を前提として進めるため、設計何もわからん!という方は以下の記事から読むことをお勧めします。記事の後半で依存性の逆転について触れているため、その辺りを押さえてからDIについて学ぶと良いでしょう。
【Unity】ECSで実装されたトゥイーンライブラリ「Magic Tween」を公開しましたUnity2023年9月9日2023年9月9日 現在はv0.1.0ということで実験的なライブラリ、という位置付けではありますが、機能面に関してはGameObject/ECSの両方をサポートし、Sequenceの機能やTextMesh Proのサポートなど、非常に豊富な機能を取り揃えています。また、性能に関してもUnity向けのトゥイーンライブラリとしては最速クラス(というか圧倒的に最速)になっています。そのため、実用性に関しては今の時点でも十分即戦力になり得るライブラリになっているのではないでしょうか。 ただ、諸事情により公開を前倒ししたので、内部の設計がちょっと、というかそれなりにヤバめな雰囲気を醸し出しています。というか、うん、ヤバい。 そんな感じなので、ECSのサンプルとして中身覗くのはお勧め
今回の記事はC#における構造体(struct)について。 複合的なデータを扱う際、多くの場面ではクラス(class)が用いられるかと思います。しかし、パフォーマンスが重要な場面や、GCによる影響が大きいUnityなどでは、状況に応じてクラスではなく構造体を使用した方が良いこともあります。 近年はC#においてもパフォーマンスが重視されるようになり、構造体が用いられる機会も多くなっています。またUnityのDOTSにおいても、C# Job SystemやBurst Compilerに最適化されたコードを書くために構造体を多用することになります。 ここでは構造体に関する基礎的な知識から、クラスと構造体のメモリ管理について、そして実際に構造体を用いる際の注意や活用方法についても解説していきたいと思います。 ただ今回の記事、調子に乗って色々な内容を詰め込んだ結果、めちゃくちゃに長くなってます。そのた
今回の記事はオブジェクト指向プログラミングにおける設計の基本、「SOLID原則」について。 ある程度プログラミングの文法を知っていれば、動作するコードを書くことは可能です。しかし、より良いコードを書きたいのであれば、文法の知識だけではなく、設計に関する知識も必要になってきます。 特にUnityでは、適当にコードを書いていくと目も当てられないようなスパゲッティーコードが容易に出来上がります。「とりあえずシングルトンにすりゃいいや!」みたいなノリで「何とかManager」クラスを作りまくった結果、「あれ?この処理どこに書いたんだっけ?」という状況になったこと、誰しも一度はありますよね…? 今回は、そんなクソk…良くないコードを書かないための設計原則である「SOLID原則」について紹介します。記事内のコードはC#で記述しますが、言語に関わらずSOLID原則は広く応用の効く考え方なので、是非とも覚
このページを最初にブックマークしてみませんか?
『Annulus Games』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く