タグ

c#と.netに関するgriefworkerのブックマーク (100)

  • 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

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

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

    MicroBatchFramework - クラウドネイティブ時代のC#バッチフレームワーク
  • .NET Core で Generic Host を利用する - tech.guitarrapc.cóm

    ASP.NET Core 2.1 で追加された Generic Host (汎用ホスト) は、non-Web App アプリの作成をASP.NET Core と似た書き心地で提供します。 今後のスタンダードとなる見込みですが、どのようにして Generic Hostを利用するのか見てみましょう。 ※ 社内向けブログの転載なのでシリーズ化します。 目次 目次 TL;DR; Generic Host とは WebHost (ASP.NET Core) との違い Generic Host を使う目的 Configure 処理の追加 書き心地 サービス処理をDIする まとめ Tips IHostBuilder.RunConsoleAsync, IHostBuilder.Start, Host.StartAsync, IHost.RunAsync の違い ASP.NET Core 3.0ではGene

    .NET Core で Generic Host を利用する - tech.guitarrapc.cóm
  • neue cc - 株式会社グラニを退任します

    創業期より参加し、取締役CTOを務めている株式会社グラニを退任します(今日、ではなく正確にはもう少し残りますが)。 マイネットさんのプレスリリースより、グラニのスマートフォンゲーム事業に関する買収と協業に向けた基合意のお知らせ、グラニのスマートフォンゲーム「黒騎士と白の魔王」の配信権を買取。4月よりマイネットグループが提供・運営を持ちまして、タイトルならびにグラニのメンバーはマイネットグループへと参画しますが、私は移らず、そのまま退任という形になります。開発チームそのものはマイネットさんへ引き続きジョインしますので、ゲーム自体の運営は問題なく続いていきます。その点はご安心ください。 私の次は決まっていないので、とりあえずGitHubにレジュメを公開しています。 GitHub - neuecc/Resume また、個人会社として New World, Inc. を設立しました(正確にはまだ

  • C#の実験的なBlazor(WebAssembly+Razor)とSignalRでチャットを作ってみた2実装編 - Qiita

    前書き こちらはタイトル通りのチャットの基部分をとりあえず作ってみたのでサンプルとして投稿しております。当投稿は実装編となり、開発準備などを行った1準備編の続きです。 あくまでも実用レベルではありませんので見た目は適当で送受信する内容もチャットとして使うには足りていないものになりますが、以下の内容を実装できればとりあえずの基礎部分はできるため十分かと思います。 送信ボタンのクリックでC#のイベントハンドラを呼び出す C#からJavaScriptを呼び出し、画面の入力値をクラスのインスタンスを引数として渡す SignalRをJavaScriptから使用してServerのhubへ送信し、全クライアントで受信する(こちらはただのAsp.Net CoreによるSiganlRなので特に問題はないはずでした) JavaScriptからC#のメソッドを呼び出してhubより受信したオブジェクトを引数とし

    C#の実験的なBlazor(WebAssembly+Razor)とSignalRでチャットを作ってみた2実装編 - Qiita
  • C#の実験的なBlazor(WebAssembly+Razor)とSignalRでチャットを作ってみた1準備編 - Qiita

    この投稿は何? とりあえずBlazorとSignalRを使用してシンプルなとなりますがチャットを作るところまで持って行けましたので投稿してみました。 ※この記事はBlazorの0.1.0preview頃の情報を元にしています。 正直2018年06月29日現在では0.5.0previewになっており、破壊的な変更も多く入っています。 また、Blazorが凄かった件のjsakamoto氏のBlazor アプリケーションプログラミング自習書は非常に役に立ちますので一読することをお勧めします。 自分もこれを見てやっちまってるゎーと思って修正したところやこんなことができるのかと追加したところがあります。(追記:2018年06月29日) 2020年01月28日のASP.NET Blog|Blazor WebAssembly 3.2.0 Preview 1 release now available B

    C#の実験的なBlazor(WebAssembly+Razor)とSignalRでチャットを作ってみた1準備編 - Qiita
  • HttpClientをマルチスレッドで運用する場合の注意点 - Qiita

    始めに HttpClientをマルチスレッドかつ高負荷で回す時、少々ハマった点があったので、注意するべき点について書く。 シングルスレッドの場合 https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ にもある通り、できる限り一つのHttpClientインスタンスで使いまわすという方法で問題はない。 実際自分もこういう風に使っていた。 マルチスレッドの場合 しかし、マルチスレッドでこれを行うと少々厄介なことになる。 実際に以下のようなメソッドを適当なWindowsマシン上で実行してみよう。(要dotnet-sdk-2.0以上) using System; using System.Net; using System.Linq; using System.Net.Http; using System.Threading.T

    HttpClientをマルチスレッドで運用する場合の注意点 - Qiita
  • neue cc - Introduction to the pragmatic IL via C#

    この記事はC# Advent Calendar 2017のための記事になります。12/1はmasanori_mslさんの【C#】処理の委譲で迷った話でした。そしてこの記事は12/2、のはずが今は12/4、つまり……。すみません。 ところでですが、私は今年の自身のテーマとして、「Extreme C#」を掲げています。C#で極限まで性能を出していく、ということを主題にして様々なものを公開してきました。その中でもILを書く技術というのは、どうしても欠かせないものです。実際、私が近年制作したライブラリはほとんどIL生成を含んでいます。 例えば、シリアライザ - ZeroFormatter, MessagePack for C#, Utf8Json。RPC - PhotonWire, MagicOnion。DI - MicroResolver。これらから、実際に使われた例と、そして実地でしか知り得な

  • ILを使った動的なコード生成入門(高速リフレクション-インスタンス生成編) - Qiita

    やること ILのこねかたについて、多少は実用的な例を題材に入門してみます。 多少は実用的ということで、よくあるケースとして高速なリフレクション用のインターフェースを実装してみます。 具体的には次のようなインターフェースを用意しておき、その実装クラスのコード生成を行います。 高速なオブジェクトの生成 public interface IActivator { ConstructorInfo Source { get; } object Create(params object[] arguments); }

    ILを使った動的なコード生成入門(高速リフレクション-インスタンス生成編) - Qiita
  • ILを使った動的なコード生成入門(高速リフレクション-プロパティアクセス編) - Qiita

    やること 前回の続きとして、PropertyInfoをもとに高速なプロパティアクセスの動的生成を行います。 高速なプロパティアクセス public interface IAccessor { PropertyInfo Source { get; } object GetValue(object target); void SetValue(object target, object value); } 進め方 基的なやりかたは前回と同様、以下の手順で行います。 ベースとなるinterfaceを用意 サンプルとなる実装をC#でベタ書きしてビルド ビルド結果をildasmで逆アセンブルし、その内容をもとに動的生成を行うコードを記述 まずは単純そうなところからということで、以下のようなstring型のプロパティを持つDataクラスと、そのアクセスを行うIAccessorをサンプルとして書いてそ

    ILを使った動的なコード生成入門(高速リフレクション-プロパティアクセス編) - Qiita
  • メモリダンプから.NETのメモリ状態を探りたい - Grani Engineering Blog

    こんにちは、@mayukiです。 以前、このブログにてダンプ解析入門 - Visual Studioでの可視化によるC#トラブルシューティングというスタックオーバーフローのような問題を調査する方法について触れましたが、今回はダンプを元にメモリ周りの状態を見ていく方法について調べたので少しまとめてみました。 長い時間実行するようなアプリケーション(アプリケーションサーバーなど)ではメモリの使用状況やメモリリークなどを調査したいというケースがたまにやってきます。そんなときにはプロセスのメモリダンプを取得して解析することで問題の原因がわかりそう…そんなシチュエーションで役立つかもしれません。 お品書き お品書き 前提 メモ: 64bit コンピューターで動作している32bit プロセスのダンプをとる ダンプのみどころ どのツールで解析すれば? Visual Studioを試してみる DebugD

    メモリダンプから.NETのメモリ状態を探りたい - Grani Engineering Blog
  • neue cc - C#におけるTypeをキーにした非ジェネリック関数の最適化法

    MicroResolver 2.3.3!というわけで、例によってバージョンがデタラメになるんですが、アップデートしてました。MicroResolverとその解説については以前のブログ記事 MicroResolver - C#最速のDIコンテナライブラリと、最速を支えるメタプログラミングテクニック をどうぞ。そして、オフィシャルな(?)ベンチマーク結果でも、それなりに勝利を収めています。 |Container|Singleton|Transient|Combined|Complex|Property|Generics|IEnumerable| |:------------|------------:|------------:|-----------:|----------:|:------------|----------:|--------------:| |No|61 53|68 62

  • neue cc - MicroResolver - C#最速のDIコンテナライブラリと、最速を支えるメタプログラミングテクニック

    MicroResolver、というDIコンテナを作りました。Microといいつつ、フルフルではないですがそれなりにフルセットな機能もあります。DIの意義とか使い方とかは割とどうでもいい話なので、何をやったら最速にできるのかってところを中心に説明しますので、DIに興味ない人もどうぞ。 GitHub - neuecc/MicroResolver Install-Package MicroResolver 例によってインストールはNuGetからで、.NET 4.6 から .NET Standard 1.4 で使えます。 DIコンテナはIoC Performanceという、存在するDIライブラリは全部突っ込んだ総合ベンチマークがあるので、そこで好成績を出せれば勝ったといえるでしょう。 |Container|Singleton|Transient|Combined|Complex| |:------

  • ファイルのダウンロードをレジューム(再開)するには?[C#、VB] - @IT

    現在多くのWebサーバでは、ファイルをダウンロードする際にダウンロードの開始位置を指定できるようになっている。この機能を使えば、何らかの理由で中断してしまったファイルのダウンロードを、中断した位置からレジューム(再開、リジューム)することができる。稿では、そのコーディング方法について解説する。 HttpWebRequest/HttpWebResponseクラスによるダウンロード ここではまず、HttpWebRequest/HttpWebResponseクラス(ともにSystem.Net名前空間)を使用して通常のダウンロード(新規ダウンロード)を行うコードを示す。HttpWebRequest/HttpWebResponseクラスの基的な使い方については「TIPS:WebRequest/WebResponseクラスでWebページを取得するには?」を参照してほしい。 このDownloadメソ

  • neue cc - Micro-ORMとC#(とDapperカスタマイズ)

    C#に続き、ASP.NET Advent Calendar 2012です。前日は84zumeさんのWebFormっぽいコントロールベスト3でした。私はC#ではMemcachedTranscoder - C#のMemcached用シリアライザライブラリを書きまして、ああ!これこそむしろASP.NETじゃねえか!と悶絶したりなどして、日付逆にすれば良かったよー、困ったよー。しかもあんまし手持ちの札にASP.NETネタがない!というわけで、ASP.NETなのかビミョーですが押し通せば大丈夫だろう、ということでMicro-ORMについて。 Micro-ORM? 最近タイムリーなことに、またORM論争が起こっていて。で、O/R Mapperですが、私としては割と否定派だったりして。C#にはLINQ(to SQL/Entities)があります!はい、色々な言語のORMを見ても、LINQ(to SQL/

  • インターフェースを拡張する2つの手段 ― C#への「インターフェースのデフォルト実装」の導入(後編)

    破壊的な影響を他に及ぼすことなくインターフェースの機能を拡張するには、デフォルト実装に加えて拡張メソッドも使用できる。今回はこれら2つの方法がなぜ必要なのか、それぞれが得意としている分野について詳しく見る。 ← 前回 連載 INDEX 次回 → デフォルト実装と拡張メソッド C#以外の言語が持つ「インターフェースのデフォルト実装」に類似の機能、例えばJavaのデフォルトメソッドは、「既存のインターフェースに対して、利用側のコードを壊さずに、インターフェース機能を拡張するもの」と説明される。C#で「拡張」というと、すでに拡張メソッドという機能があって、同じ目的のものがすであるのにどうしてデフォルト実装が必要なのかと思うかもしれない。 これら2つの機能は、確かに同じ目的に使える部分もあるが、それぞれにしかできないことも存在している。ひとくちに「インターフェースの機能拡張」といっても、実のところ

  • デフォルト実装の導入がもたらす影響 ― C#への「インターフェースのデフォルト実装」の導入(中編)

    前回は一般論としてのインターフェースとその課題を見た。今回はC#にインターフェースのデフォルト実装を導入すると、どのようなコードが書けるようになるのか、導入するために必要な修正点などについて見ていく。 ← 前回 連載 INDEX 次回 → 前編では、一般的にインターフェースがどのように実装されているかと、インターフェースが抱える問題を説明し、その問題はインターフェースが実装を持てれば解決するという話をした。前置きが長くなったが、今回と次回ではC#における事情について見ていこう。C#でも、インターフェースに実装を持てるようにしたいという動きが出始めている。 要するに、これはインターフェースに対して過剰に掛かっていた制限を緩めるというものであり、技術的な課題はそれほど大きくない。ただし、C#コンパイラーだけでなく、.NETランタイムの修正が必要となる。これは.NET Framework 2.0

  • インターフェースを「契約」として見たときの問題点 ― C#への「インターフェースのデフォルト実装」の導入(前編)

    C#におけるインターフェースとは、ある型が持つべきメソッドを示す「契約」であり、実装は持てない。だが、このことが大きな問題となりつつある。今回から全3回に分けて、C#がこの問題にどう対処しようとしているかを見ていく。 ← 前回 連載 INDEX 次回 → 現在、「C#にインターフェースのデフォルト実装(Javaでいうデフォルトメソッドに相当する機能)を追加しよう」という話がある。C#にこの機能を導入するに当たっては、C#コンパイラーだけではなく、.NETランタイムの修正が必要になる。 この機能の説明に入る前に、前編では、そもそもインターフェースというものが必要とされる理由や、その内部的な仕組みについて説明したい。 インターフェース 多くのプログラミング言語で、クラスとは別にインターフェース(interface: 境界面、接点)*1というものが用意されている。この2つの違いはおおむね、以下の

  • neue cc - C# 7.0 custom task-like の正しいフレームワークでの利用法

    例年、この頃はMVP更新が云々とかなのですが、今年からシステムが変わって更新時期に変動があるんで何もありませんが、一応まだ継続しています。それはともかくとしてVisual Studio 2017が出ました。会社でも全プロジェクトがVS2017に移行完了を果たして、代わり映えしないようで、タプル記法のデコンストラクションとか工夫すると結構便利だな、とか使い始めると色々発見があります。タプル記法やデコンストラクションの工夫に関しては、弊社エンジニアリングブログのC# 7.0 が使えるようになったので ValueTuple を活用してみたをどうぞ。 そんな中で、私がはよ来てくれ……と願っていたC# 7.0の新機能は、task-likeです。Proposal: arbitrary task-like types returned from async methodsで延々と議論されていたようですが

  • async/await ~非同期なライブラリは楽じゃない~ - 飽きっぽい人のブログ

    ※個人的な備忘録的なものです。 こっちとかこっちのが良くまとめられています。 ライブラリ制作者向けの内容になっているのでアプリ製作者にはあまり関係がないかもしれません なお、サンプルコードは全てWindowsストアアプリとして実行したものとします デッドロックで泣きを見ないように 下のようなライブラリのコードがあるとします gist11215254 このライブラリのDoAsyncは呼び出され方によってはデッドロックされてしまいます 下のコードがその例になります gist11215568 原因はTaskのWaitメソッドでロックしたスレッドに対して、HeavyWorkAsyncメソッドでワーカースレッドで作業していたTaskが元のUIスレッドに戻ろうとしたためです 図にすると以下のようになります Waitするなと思った方がいらっしゃるかもしれませんが、使用するのは自分ではなく他人のアプリ製作

    async/await ~非同期なライブラリは楽じゃない~ - 飽きっぽい人のブログ