【.Net C#】Task をもっと手軽に使いたい

.Net には、マルチスレッドの処理を使いやすくした Task クラスがありますが、使いやすいとは言え、かなりの知見が必要になります。
System.Threading.Tasks 名前空間には、クラスだけでも以下の種類があります。

.Net 8.0 の System.Threading.Tasks 名前空間に含まれるクラスの一部
※タップまたはクリックすると大きい画像で表示します。

.Net のような、あらゆるシチュエーションで使えるように構成された API では、多種多様な機能を用意するのは正しいと思います。
ただ、スレッドプールの恩恵をつまみ食いしたいようなときには、学習コストが高すぎます。
そこで、学習コストをほとんど必要としないマルチスレッド用クラスを作りました。

“【.Net C#】Task をもっと手軽に使いたい” の続きを読む

【.Net】アプリのパスを取得する方法っていくつもあるけど何か違うの?【C#】

.Net アプリ パス…で検索すると、だいたい以下の4つのメソッドとプロパティが見つかります。
どの記事を見ても、どれを使っても良い…みたいなことが書いてあります。

  • Application.StartupPath
  • Assembly.GetExecutingAssembly().Location
  • AppDomain.CurrentDomain.BaseDirectory
  • Environment.CurrentDirectory

でも、ふと疑問がわきます。

「どれを使っても同じ結果を得られるなら、なんで4通りもの方法が用意されているんだろう?」

同じものを4つに分ける意味はありません。
本当に「同じ」なら、1つあれば良いはずです。

実はこれ、作成するアプリや目的によって使い分ける必要があります。

“【.Net】アプリのパスを取得する方法っていくつもあるけど何か違うの?【C#】” の続きを読む

【.Net C#】System.Exception を継承すると ISerializable がどうのこうのと警告が出る

厄介なバグに繋がる可能性があるコード

class Test {
  public class Hoge : System.Exception {}
}

“【.Net C#】System.Exception を継承すると ISerializable がどうのこうのと警告が出る” の続きを読む

【.Net Visual Studio C#】クソコードを書いていないか手軽に確認する方法

Visual Studio を使い、自分がクソコードを書いてしまっていないかをパっと確認する方法です。

“【.Net Visual Studio C#】クソコードを書いていないか手軽に確認する方法” の続きを読む

【.Net C#】Thread.Sleep と Task.Delay が遅い

ゲームを作るときに Unity を使ったりする場合は気にする必要がないのですが、そういったツールを使わない場合、FPS を固定させるために1フレーム未満で処理が完了したら残りの時間待つ…という処理が必要になります。

※本稿での FPS は、ファーストパーソンシューターの略ではなく、フレーム・パー・セカンド(毎秒のフレーム数)のことです。

そうしないと、フレームレートが一定にならないので FPS も一定になりません。
ゲームのスピードが毎フレームバラバラになり、カクカクした動きになります。

FPS 60 の場合、1フレームは 16.6666…ミリセカンド以内に処理する。
FPS 30 の場合、1フレームは 33.3333…ミリセカンド以内に処理する。

ゲームループ(float delta_time) {
 ゲームの色んな処理をする
 if (1フレーム未満で処理が終わってる) {
  余った時間待つ
 }
 次のフレームの処理へ
}

疑似コードで表現すると、上記のような処理になります。
本稿では、上記疑似コード中の「余った時間待つ」処理を .Net を使って実装する場合の注意点について説明します。

“【.Net C#】Thread.Sleep と Task.Delay が遅い” の続きを読む

【.Net C#】Enumerator の使い方

この記事では Microsoft .Net Framework の Enumerator および IEnumerable<T> の使い方について説明しています。

動作確認した環境
Microsoft Visual C# Compiler 3.5.0 beta4
.Net Framework 4.8.03752

こちらの記事は IEnumerable の使い方について説明しています。
GetEnumerator メソッドの使い方は以下の記事で説明しています。

2023/03/04
冒頭に GetEnumerator メソッドへのリンクカードを追加。

2021/01/07
サンプルソースコード内 GetEnumerator() の戻り値の型を IEnumerable から IEnumerator に修正。
 
“【.Net C#】Enumerator の使い方” の続きを読む