タグ

c#に関するgriefworkerのブックマーク (235)

  • ZString - Unity/.NET CoreにおけるゼロアロケーションのC#文字列生成

    Cy#の河合です。今回、文字列生成におけるメモリアロケーションをゼロにする「ZString」というライブラリを公開しました。そこで、この記事ではZStringの紹介の他に、あらためてC#の文字列についてを深く分解して解説し、Stringの複雑さと落とし穴、そしてZStringの必要性について解説します。 [GitHub – Cysharp/ZString] 以下の表は `”x:” + x + ” y:” + y + ” z:” + z` という単純な文字列連結においてのパフォーマンス計測です。 それぞれ “x:” + x + ” y:” + y + ” z:” + z ZString.Concat(“x:”, x, ” y:”, y, ” z:”, z) string.Format(“x:{0} y:{1} z:{2}”, x, y, z) ZString.Format(“x:{0} y:

    ZString - Unity/.NET CoreにおけるゼロアロケーションのC#文字列生成
  • Xamarin.Formsでページが破棄されたタイミングでViewModelのDisposeなどを実行する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Xamarin.Formsでページが破棄されたタイミングでViewModelのDisposeなどを実行する - Qiita
  • System.Threading.Channelsを使う - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに マルチスレッドでの非同期データ受け渡しライブラリのSystem.Threading.Channels(corefxlabにあったころはSystem.Threading.Tasks.Channels)が、corefxに統合され、この度4.5.0-rc1としてリリースされたので、 さすがに大きな変更はないだろうと踏んで使い方などを書く。 参考: corefxlabにあったころの記事 何ができるようになるか 非同期でのプロデューサー・コンシューマーパターンを作るのがより容易になる。 特徴としては以下のようになる 順序は必ずFIFO(

    System.Threading.Channelsを使う - Qiita
  • 非同期外部プロセス起動で標準出力を受け取る際の注意点 - Qiita

    はじめに C#というか.NETの世界では、外部プロセスを起動する際にSystem.Diagnostics.Processを使用するということになっている。 このProcessクラスには非同期イベントベースで標準出力をやり取りするためのAPIが存在するが、意図しない動作になる場合があるので要注意という話。 Processの非同期APIについて 非同期で標準出力、エラー出力を受け取り、かつ非同期でプロセス終了を待ちたい場合、以下のようにする。 ProcessStartInfoを以下のように設定する UseShellExecute=false RedirectStandardOutput=true RedirectStandardError=true Processをnewする(Startはしない) Processを以下のように設定する OutputDataReceivedにコールバック登録 E

    非同期外部プロセス起動で標準出力を受け取る際の注意点 - Qiita
  • neue cc - ProcessX - C#でProcessを C# 8.0非同期ストリームで簡単に扱うライブラリ

    C#使う人って全然外部プロセス呼び出して処理ってしないよね。というのは、Windowsがなんかそういうのを避ける雰囲気だから、というのもあるのですが、ともあれ実際、可能な限り避けるどころか絶対避ける、ぐらいの勢いがあります。ライブラリになってないと嫌だ、断固拒否、みたいな。しかし最近はLinuxでもばっちし動くのでそういう傾向もどうかなー、と思いつつ。 避けるというのはOSの違いというのもありそうですが、もう一つはそもそも外部プロセスの呼び出しが死ぬほど面倒くさい。ProcessとProcessStartInfoを使ってどうこうするのですが、異常に面倒くさい。理想的にはシェルで書くように一行でコマンドと引数繋げたstringを投げておしまい、と行きたいのですが、全然そうなってない。呼び出すだけでも面倒くさいうぇに、StdOutのリダイレクトとかをやると更に面倒くさい。非同期でStdOutを

  • Xamarin.Essentials 入門 - #1 Xamarin.Essentials とは - tafuji's blog

    はじめに この記事は、Xamarin Advent Calendar 2019 の 23日目の記事です。 Xamarin.Essentials 入門というタイトルで、Xamarin.Essentials の使い方と読み方について記載しています。 Xamarin.Essentials とは Xamarin.Essentials とは、何かを簡単に説明します。Xamarin.Essentials とは、プラットフォーム固有の機能(位置情報、ネットワークとの接続状態、デバイス情報など)を利用するためのクロスプラットフォーム API です。Microsoft により提供されていて、v1.3 では 33 の機能が提供されています。 「Xamarin とは」という記事や書籍でよく紹介されますが、Xamarin を使ってアプリケーションを開発する方法として、二つの方法が紹介されることがよくあります。 こ

    Xamarin.Essentials 入門 - #1 Xamarin.Essentials とは - tafuji's blog
  • neue cc - MessagePack for C# v2によるC#における最新のI/Oパイプライン最適化

    MessagePack for C#のVersion 2を日リリースしました。出る出る詐欺で、一年がかりでリリースまで漕ぎ着けました!とにかくめっちゃ時間かかった、死ぬほど私のリソースが取られていた、ので当にリリースまで持ってこれてよかった……。めでたし。 今回はとてもOSSっぽく開発していて、メインの開発はMicrosoftのVisual StudioチームのPrincipal Software EngineerであるAndrew Arnottさんが書いています。私はそれに対してひたすら、APIデザインが好きじゃないだの、パフォーマンスが私の基準に満たしてないだの、文句つけまくる仕事をしていました。しかしコードのクオリティはさすがに非常に高くて、私だけだったらここには至れなかっただろうことを考えると、いい感じの共同開発ができたんじゃないかなあと思います。その結果として、一年前に掲示さ

  • C#でわかる こわくないMonad

    開発者にとってシェルが必要不可欠なものであることは論を俟ちませんが、当たり前の存在すぎてこれがどのように実現されているのかを知る機会はあまりないと思います。トークでは、シェルがどのように実現されているのかを、実際にシェルを実装する過程を通じてお話しします。 ※ もともとのトークのタイトルは「入門 シェル」でしたが,わかりやすさのため「入門 シェル実装」にタイトルを変更しています.

    C#でわかる こわくないMonad
    griefworker
    griefworker 2019/12/09
    C# で Monad。分かりやすかった。
  • JWT Authentication Flow with Refresh Tokens in ASP.NET Core Web API

  • Uno Platform のススメ - Qiita

    はじめに この記事は Xamarin Advent Calendar 2019 の 8 日目の記事です。 最近ちょっとずつ注目されつつある (?) "Uno Platform" という .NET 向けの UI フレームワークの紹介記事です。 Uno Platform とは Uno Platform Uno Platform は .NET 向けのクロスプラットフォーム UI フレームワークです。 .NET のクロスプラットフォームフレームワークとしては "Xamarin.Forms" が Xamarin 自身からリリースされていることもあり、最も有名だとは思います。 Uno Platform の最大の特徴はなんといっても UWP の API 互換によるクロスプラットフォームを実現する という点に尽きます。ユーザー (アプリ開発者) としては UWP アプリを作れば (理想論でいえば) それを

    Uno Platform のススメ - Qiita
    griefworker
    griefworker 2019/12/09
    Uno が Skia Backend 対応したら、C# の Flutter みたいになり得そうだな。
  • UniTaskを使った話 - Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)

    この記事は Akatsuki Advent Calendar 2019 - Adventar 5日目の記事です。 はじめに UniTaskとは🤔🤔🤔 やりたいこと🤔 まず最初に考えたやり方🤔 Incremental Compilerが不要に!😇 とはいえ全部をいきなりUniTaskに置き換えるのは難しくない? UniTaskCompletionSource UniTaskの中身を解析してみよう🤔 PlayerLoopHelper PlayerLoopHelper.csの中身 ContinuationQueue PlayerLoopReusablePromiseBase UniTask IsCompleted Awaiter IAwaiter ICriticalNotifyCompletion 次に気になったこと どうやってAsyncUniTaskMethodBuilderを呼

    UniTaskを使った話 - Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)
  • neue cc - .NET Core時代のT4によるC#のテキストテンプレート術

    C# Advent Calendar 2019用の記事となります。C# Advent Calendar 2019はその2もあって、そちらも埋まってるので大変めでたい。 さて、今回のテーマはT4で、この場合にやりたいのはソースコードジェネレートです。つまるところC#でC#を作る、ということをやりたい!そのためのツールがテンプレートエンジンです。.NETにおいてメジャーなテンプレートエンジンといえばRazorなわけですが、アレはASP.NET MVCのHTML用のViewのためのテンプレートエンジンなため、文法が全くソースコード生成に向いていません、完全にHTML特化なのです。また、利用のためのパイプラインもソースコード生成に全く向いていない(無理やりなんとか使おうとするRazorEngineといったプロジェクトもありますが……)ので、やめておいたほうが無難です。 では何を使えばいいのか、の答

  • HttpClient よりも HttpClientFactory を利用したほうが良いかも - 世界のやまさ

    .NET において REST API を呼び出す際、多くの方が HttpClient を使用すると思いますが、その時の注意点が帝国兵さんの Qiita で書かれています。 qiita.com この記事に書いてある通りで、 HTTP Client インスタンスをいちいち破棄して作成を繰り返していると、CLOSE_WAIT または TIME_WAIT 状態の SNAT ポートが増えてしまい、ポートが枯渇して通信ができなくなります。 具体的には hping3 で繰り返しリクエストを行っているのと同じ状態であると思います。 hping3 の使い方の具体例は宇田さんのサイトをご覧ください。 www.syuheiuda.com さて、 private static readonly HttpClient HttpClient; を使うのも良いと思いますが、 .NET Core 2.1 以降 であれば

    HttpClient よりも HttpClientFactory を利用したほうが良いかも - 世界のやまさ
  • 【Unite Tokyo 2019】Understanding C# Struct All Things

    2019/9/25-6に開催されたUnite Tokyo 2019の講演スライドです。 河合 宜文(株式会社Cysharp) こんな人におすすめ ・C#を極めたいエンジニア ・パフォーマンスに興味のあるエンジニア ・プログラミング言語マニア 受講者が得られる知見 ・structに関する深い知識 ・パフォーマンス向上のヒント ・C#の新しい文法と活用法 Unityのイベント資料はこちらから: https://www.slideshare.net/UnityTechnologiesJapan/clipboards Read less

    【Unite Tokyo 2019】Understanding C# Struct All Things
  • C# で null 許容型あれこれ - ぷろじぇくと、みすじら。

    Created at: 2019-09-25 .NET Core 3.0 のリリースとともに C# 8.0 がきて、null 許容型 (nullable reference types) を使えるようになったので使ってみたメモです。 未初期化だけど後で初期化するパターンコンストラクターではまだ初期化しないのだけど、いずれフレームワークから初期化するので API を利用する側はほぼ null を扱わない、けど内部の初期状態は null なのを許してほしいというケースはまあよくあります。Kotlin の lateinitTypeScript の definite assignment assertion みたいなやつですね。 C# ではズバリそれっぽいものはないので default! を初期値として代入しておけばよいです。 This file contains bidirectional

  • 今日からできる!簡単 .NET 高速化 Tips

    Event : Visual Studio Users Community Japan #1 Date : 2019/09/14 ソフトウェア/サービス開発において最も後回しにされるものの代表が「パフォーマンスの向上」です。C#/.NET の最大の武器は開発生産性ですが、C# 7.0 以降はパフォーマンス向上のための機能追加が多数行われています。いくつかのポイントを押さえることで実装時からより高速なコードを書くことができるようになります。 このドキュメントでは、そんなポイントとなる箇所をふんだんにお届けします。Read less

    今日からできる!簡単 .NET 高速化 Tips
  • MasterMemory - Unityと.NET Coreのための読み取り専用インメモリデータベース

    Cy#の河合です。今回新しくオープンソースライブラリとして、マスターデータの管理用途を主眼に置いた、読み取り専用のインメモリデータベースを公開しました。 [GitHub – Cysharp/MasterMemory] 今までのゲーム開発の経験から、「省メモリ(インメモリということもあり使用メモリ量には気を使う」「高速なデータベースロード(構築に時間がかかるとゲームの起動速度に大きく影響する)」「高速な検索(ディクショナリのルックアップと同程度のクエリ)」の3点を重視して作りました。以下がベンチマークの結果となります。 MasterMemory、SQLite、LiteDB、RocksDBがインプロセス、Memcachedのみ別プロセスのマシン内通信による比較です。SQLite(ファイル読み込み型)の4700倍高速で、1クエリでのアロケーションはゼロです。また、保存時のファイルサイズも極小です

    MasterMemory - Unityと.NET Coreのための読み取り専用インメモリデータベース
  • neue cc - CIや実機でUnityのユニットテストを実行してSlackに通知するなどする

    前回(?)CircleCIUnityをテスト/ビルドする、或いは.unitypackageを作るまででは、ユニットテストに関する部分がうまく行ってなくて放置でした。放置でいっかな、と思ってたんですが、改めてユニットテストをCIでがっつり実行したい、というかIL2CPPのテストをがっつしやりたい。という切実な要望が私の中で発生したので(N回目)、改めて取り組んでみました。 さて、オフィシャルな(?)ユニットテストのコマンドラインの実行の口は、Writing and executing tests in Unity Test Runnerの最後の方のRunning from the command lineの節に書いてありました(コマンドライン引数のほうのマニュアルにはリンクすら張ってなかったので気づかなかった……!)。つまり、こんなふうにやればいい、と。 Unity.exe -runTes

    griefworker
    griefworker 2019/05/07
    RandomFixtureKitのエッジケースになり得る値だけを詰めるモードはライブラリ開発で助けられそう。
  • C# パフォーマンス改善に使える新しめの機能たち 7.0〜 - Qiita

    時代に合わせてバージョンアップを続け、モダンな言語もまだまだ彼の背中を追っている部分があると噂されたりしている言語、C#。 現状の利用シーンとして割と大きいめの Unity (ゲームエンジン) では、使えるC#のバージョンがぐいぐいっと上がりはじめて以降、そこそこ新しい書き方も認知されてきているようです。 しかし、個人的に注目している C#の新機能は、ショートハンドや関数型言語由来の機能よりもむしろ、C#自体のパフォーマンスを改善するような文法や標準ライブラリたちです。 ーーパフォーマンスを改善する言語機能って一体なんのことでしょう。 「C# なんて、ランタイムが勝手にJITで最適化した機械語にして走らせてくれるわけで、Unityの場合はc++トランスパイルされるわけで、べつにプログラマがミクロなチューニングとか意識しなくても、夜、寝る前とかに祈ったり寄付とかをしていれば、ランタイムをつ

    C# パフォーマンス改善に使える新しめの機能たち 7.0〜 - Qiita
  • MicroBatchFramework - クラウドネイティブ時代のC#バッチフレームワーク

    Cy#の河合です。昨年12月に、『MagicOnion』というライブラリのリリースを告知しました。今回、再びオープンソースライブラリとして、C#のためのCLI/Batchライブラリをリリースしました。 [GitHub – Cysharp/MicroBatchFramework] .NET CoreになってWindowsMacLinux問わずクロスプラットフォームなアプリケーション開発環境として機能するようになったC#ですが、そして機能的には十分揃っているのですが、ちょっと気の利いたフレームワークは意外と欠けているところがあります。バッチ・コマンドラインアプリ。というと地味なトピックスですが、ゆえに基機能以上のサポートがなかったりします。しかし、「C#の可能性を切り開いていく」という理念を掲げるCy#としては、派手・地味を問わず、現状のC#に欠けているものを埋めていくことで、C#がアプ

    MicroBatchFramework - クラウドネイティブ時代のC#バッチフレームワーク