C#
WebPageではasync/awaitをそのまま使うことができません。 利用するには以下の手順を踏みます。 1,Web.config設定 /configuration/appSettingsに、key=UseTaskFriendlySynchronizationContextな項目を追加。 詳細は下記を参照。 <configuration> .... <appSettings> <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> .... </appSettings> .... </configuration>
.NET4.5から導入される新しい非同期呼び出し。 こんな感じで使うようです。 public partial class Form1 : Form { public Form1() { InitializeComponent(); } //内部で非同期処理を行うメソッドにはasyncをつける private async void button1_Click(object …
最近、ASP.NETMVCのソースコードを読んでいるのだが、そこでは複雑なラムダ式が多々でてくる。 今回はその一例としてアクションフィルタの処理(ControllerActionInvokerクラスのInvokeActionMethodWithFiltersメソッド)を自分なりに解釈し、コードを起こした…
その1 System.Collections.ICollectionインターフェイスにキャストすることで、SyncRootにアクセス可能。これでlockを行うことができる。 //こんな感じ var list = new List<String>(); lock (((System.Collections.ICollection)list).SyncRoot) { list.Add("アイテ</string>…
DBアプリケーションのパフォーマンス・チューニング − @ITの内容メモ クエリのデータ転送量を減らす 不要な項目をSELECT区に含めない。安易に*を使用しない。 SQLServerからの転送量がかなり節約できる。 クエリの内容をデバッグ出力 Entity Frameworkでは…
IObservable(T) インターフェイス (System) IObserver(T) インターフェイス (System) .NET Framework 4から追加されたこれらのインターフェイスを使ったサンプルを作成していました。 オブザーバーパターンは一方通行の通知を行うパターンだというのに、チャ…
基本的な大事なことです。 Javascriptのクロージャと同じ考え方です。。。 ど忘れしてましたので再確認を兼ねて書き置きします。 //非同期でFriendGridにイメージを追加していく (ダメバージョン) Task.Factory.StartNew(() => { foreach (var friend in Vie…
久しぶりに触ったので参考にした過去のメモたちをまとめておく。 CTP4のときに書かれた記事のクリッピング UntitledCTP4⇒CTP5での変更箇所一覧記事のクリッピング Untitled
こういうクラスがあるのよということを箇条書きで。 System.Collections.Concurrentで定義されているクラスを使う。 System.Collections.Concurrent 名前空間 () BlockingCollectionクラス BlockingCollection の概要 スレッドセーフなキューとして使用でき…
スレッド 同時実行可能なスレッド数はプロセッサ数に依存する。 .netではスレッドひとつに1MBのサイズが必要。 スレッドの切り替えは高コスト。(コンテキストスイッチが発生する) 大量のスレッド作成はかえって逆効果。スレッドを作成するのではなく、タスク…
お恥ずかしい話ですが、RegexクラスのReplaceメソッドがこんなに便利なんて知りませんでした。 正規表現で指定しなくてもMatchした最小単位で置換処理が行なわれるのですね。 //hello world を Hello Worldに置換する class Program { static void Main(stri…
まだ完全には理解できていない部分があります。下記参照元を参考にして とりあえず動くようにはなりましたが、構造体文字列メンバー値が正しく取得できない等 一部おかしなところがあります。 参照元 プラットフォーム呼び出しによるデータのマーシャリング …
列挙クラス定義 namespace EnumeratorSample { /// <summary> /// 数値範囲の列挙を行う2 /// </summary> class RangeEnumerable2 { private int from; private int count; private int step; /// <summary> /// 初期化 /// </summary> /// <param name="from"></param> /// <param name="count"></param> /// <param name="step"></param> publ…
主にLINQまわり1 3.0での省略記法について データ型は型推論により決定される。 その為、省略して書かれていても型はしっかりと決まっている。 クラス定義の省略記法 public class Parson { public String Name { get; set; } public String Sex { get; set;…
【設定ファイル】 アプリケーション構成ファイルを追加して、そこに設定を記述する。 ログ出力判定 出力レベルが、TraceSourceで指定されているSourceSwitchのログレベル以上であるか確認 TraceSourceに指定されているListener毎に以下を確認 出力レベルが、…
見た目 メインフォーム public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void btnSelectDir_Click(object sender, EventArgs e) { FolderBrowserDialog dialog = new FolderBrowserDialog(); //フォルダ選択…
下記処理で引っかかり中。デッドロックが回避できない気がしてきた。 右のメインフォーム起動時にワークスレッドを起動させ、メッセージを出してからスレッドをロック。 メインフォームのボタンクリック時のイベントで、ワークスレッドを再開させてからメイ…
2つの値が等しいか調べる、等値演算子(==)とEqualsメソッドの違い: .NET Tips: C#, VB.NET 処理 参照型比較の場合はどちらの比較方法も、同じオブジェクトを参照しているか比較する。 値型比較の場合はどちらの比較方法も、同じ値であるか比較する。 早さ ど…
基本的にCompareToは並べたときの順番を定義したものですので、等価の確認には使用しないほうが良いでしょう。
リフレクションの勉強をかねてUnitTestツールを書いてみた。 Formにはテスト一覧表示用のTreeViewとテスト結果出力用のTextBox、テスト実行ボタンButtonを配置する。 CompareToメソッドをGetMethod()で取得する際、目的のクラスとObjectクラスにCompareToメ…
using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace DataGridViewVirtualModeSample { public…
スレッド間のやりとりを実現する。 下記の例では、スレッドBはスレッドAの処理が終わるまで待機する。 MSDNにManualResetEventの配列を使ったサンプルがある。また、WaiteOne()後のリセットを自動で行ってくれる。AutoResetEventクラスも存在する。 考え方・…
readonlyは宣言時とコンストラクタ内のどちらかで初期化ができる。 constは宣言時のみ初期化ができる。 readonlyはインスタンス毎に別の定数を作ることができる。
private volatile int count_val = 0; 複数のスレッドから参照される可能性のあるメンバにつける。 これをつけると、コンパイラの最適化の対象にならない。メンバのRead/Writeを行う際に 必ずメンバ変数の実体にアクセスするようになる。 コンパイラの最適化…
ロックオブジェクトには同期をとるスレッドから参照した時に一意となるオブジェクトを指定する。 値型を指定した場合にはボックス化が行われて、各スレッドが別オブジェクトを参照することになる。 その為、ロックは行われない。thisオブジェクトを指定した…
Thread.Join()を使用する。 呼び出しもとスレッドを対象スレッドが終了するまでブロックする。 GUIプログラムでこれを呼び出すと、固まってしまうので注意すること。 そこで下記の用にして対応した。 while(thread.IsAlived()) { Application.DoEvents; }
ThreadクラスのPriorityプロパティにて設定。 startメソッド前に設定すること。 実際にサンプルを動かしてみたが 優先順位を上げたからといって、そんなに変わるものでは無かった。
デリゲート、イベントを使用してスレッド処理中の状態の変化を送信する。 class Worker { public delegate void ThreadProcessUnitCompleteEventHandler(int state); public event ThreadProcessUnitCompleteEventHandler eventHandler; private bool finish…
★違い eventをつけて宣言すると、外部ではイベントの追加削除のみだけ アクセスできるようになる。 ★命名規則 種類 命名例 event ○○○EventHandler delegate ○○○CallBack public partial class Form1 : Form { public delegate void processEndCallBack(int s…