wiprog

C# とか,数学とか,社会とか.

C#

async な lock をしよう

C#

Qiita から移行 -- C# では,非同期なメソッドでは lock が使えません.この記事ではそれでも lock したいときはどうするのっていうお話をします. たとえば,こんなふうにダブルチェックロッキングしたいとしますね. // これが複数のスレッドから非同期に…

Span<T> のつかいみち

C#

Qiita から移行 (2019/12/10 投稿) -- これは、 C# Advent Calendar 2019 の 10 日目の記事です(遅刻すみません!)。 前の記事は、 @Xeltica さんの C# 用ゲームエンジンを自作した話 です。 .NET Core 2.1 で使えるようになってしばらくたった Span<T> です</t>…

C# で messagepack vs json 比較

C#

Messagepack の良さを社内に布教するためにベンチマークを取ったので転載しておく。 個人的には MessagePack + LZ4 の Typeless がおすすめ。 messagepack は可読性が・・・と言われることが多いけど、 Typeless なシリアライズなら型情報がつくので、 dynam…

.NET Core 3.0 移行のハマりポイントまとめ

C#

プロダクションで稼働している .NET Core 2.2 (ASP.NET Core 2.2) のシステムを .NET Core 3.0-preview8 に全移行したときのハマりポイントのまとめです。 公式の移行手順で説明が無いものを中心にのせています。 移行前のシステム ASP.NET Core 2.2 on EC2 …

C# Span<char> を使って snake_case な文字列を PascalCase に変換する

C#

ネットで検索してもなかなか良い実装が見つからなかったので自分で書きました。 他の実装と違う点として、 部分文字列 (string インスタンス) を一切アロケートしない 極力すべての操作を stack 上で済ませる ことで、パフォーマンスを意識した作りにしてい…

C# で同時実行数制御つき ForEachAsync

C#

2020/03/26 Qiita から移行. 現在下記の実装には例外ハンドリングの不具合が確認されていますので使用は推奨しません 同時実行数を抑えながら非同期を走らせる方法として、下記の記事で ForEachAsync 拡張メソッドが紹介されています。 ForEachAsync - 非同…

今からできる、速くシンプルに LINQ を書くためのコツ 3 個

C#

たびたび 「LINQ が遅い」 と言われているのを見かけるので、どうやったら速く書けるのか、どう書くと遅くなるのかについてまとめてみます。 LINQ は非常に強力で、ぼくが出会った「LINQ 遅い」のほとんどは、 実装の仕方がまずいものばかりです。 LINQ はい…

Utf8Json で JSONP を書く

C#

Utf8Json.JSONP というライブラリを作りました。 ざっくりしたライブラリの紹介と、どうやって実装したかのメモです。 簡単な紹介 nuget でインストールできます。 NuGet Gallery | Utf8Json.Jsonp 1.1.0 nuget パッケージを入れると、 Utf8Json の名前空間…

dotnet pack で XML Document つきのパッケージを作成する

C#

.NET Core では dotnet pack コマンドで簡単に nuget パッケージを作ることができます。 ただデフォルトでは XML document が出力されなくてちょっと困ったので対策を書いておきます。 忙しい人のために csproj に下記の行を追加すれば XML Document が出力…

LINQ で指定したキーだけ使って Distinct, Except とかする

C#

たとえばこんなてきとうなクラスがあったとして public class MyClass { public int Id { get; set; } public double Value { get; set; } } Id だけを見て distinct とかしたい (けど結果は Value もほしいし、Id が重複した場合に Value は順番に依存 (最…

C# の ref まとめ

C#

C#7.2 までの参照渡し関係のまとめです。 C# 7 系で参照渡しの扱いが強化されて種類も増えました。 上手につかうとサイズの大きい値型のコピーを避けられるのでまとめてみました。 動作をきちんと理解するために C# to C# の変換をしたコードや IL をのせて…

C# でオレオレパーサコンビネータをつくってみる

C#

この記事について この記事は C# Advent Calendar 2017 の 10 日目の記事です。 アホなので 9 日の夜に書きはじめています。ちゃんと間に合ったらいいねください・・・!!!! コードは github にあります wipiano/csharp-parser-combinators Haskell や Sc…