C#

ASP.NET WebForms で非同期処理を行う (.net4.5)

WebPageではasync/awaitをそのまま使うことができません。 利用するには以下の手順を踏みます。 1,Web.config設定 /configuration/appSettingsに、key=UseTaskFriendlySynchronizationContextな項目を追加。 詳細は下記を参照。 <configuration> .... <appSettings> <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> .... </appSettings> .... </configuration>

新しい非同期呼び出し(async,wait)を試す

C#

.NET4.5から導入される新しい非同期呼び出し。 こんな感じで使うようです。 public partial class Form1 : Form { public Form1() { InitializeComponent(); } //内部で非同期処理を行うメソッドにはasyncをつける private async void button1_Click(object …

複雑なラムダ式

C#

最近、ASP.NETMVCのソースコードを読んでいるのだが、そこでは複雑なラムダ式が多々でてくる。 今回はその一例としてアクションフィルタの処理(ControllerActionInvokerクラスのInvokeActionMethodWithFiltersメソッド)を自分なりに解釈し、コードを起こした…

ジェネリックな各種リストをスレッドセーフに扱う

C#

その1 System.Collections.ICollectionインターフェイスにキャストすることで、SyncRootにアクセス可能。これでlockを行うことができる。 //こんな感じ var list = new List<String>(); lock (((System.Collections.ICollection)list).SyncRoot) { list.Add("アイテ</string>…

Visual Studio 2010でアプリケーションのパフォーマンス・チューニング

DBアプリケーションのパフォーマンス・チューニング − @ITの内容メモ クエリのデータ転送量を減らす 不要な項目をSELECT区に含めない。安易に*を使用しない。 SQLServerからの転送量がかなり節約できる。 クエリの内容をデバッグ出力 Entity Frameworkでは…

IObservableインターフェイス

C#

IObservable(T) インターフェイス (System) IObserver(T) インターフェイス (System) .NET Framework 4から追加されたこれらのインターフェイスを使ったサンプルを作成していました。 オブザーバーパターンは一方通行の通知を行うパターンだというのに、チャ…

匿名メソッドの変数キャプチャ

C#

基本的な大事なことです。 Javascriptのクロージャと同じ考え方です。。。 ど忘れしてましたので再確認を兼ねて書き置きします。 //非同期でFriendGridにイメージを追加していく (ダメバージョン) Task.Factory.StartNew(() => { foreach (var friend in Vie…

ADO.NET Entity Framework Code First メモ

C#

久しぶりに触ったので参考にした過去のメモたちをまとめておく。 CTP4のときに書かれた記事のクリッピング UntitledCTP4⇒CTP5での変更箇所一覧記事のクリッピング Untitled

スレッドセーフなコレクションクラス メモ

C#

こういうクラスがあるのよということを箇条書きで。 System.Collections.Concurrentで定義されているクラスを使う。 System.Collections.Concurrent 名前空間 () BlockingCollectionクラス BlockingCollection の概要 スレッドセーフなキューとして使用でき…

スレッドとタスク

C#

スレッド 同時実行可能なスレッド数はプロセッサ数に依存する。 .netではスレッドひとつに1MBのサイズが必要。 スレッドの切り替えは高コスト。(コンテキストスイッチが発生する) 大量のスレッド作成はかえって逆効果。スレッドを作成するのではなく、タスク…

正規表現クラスでの置換

C#

お恥ずかしい話ですが、RegexクラスのReplaceメソッドがこんなに便利なんて知りませんでした。 正規表現で指定しなくてもMatchした最小単位で置換処理が行なわれるのですね。 //hello world を Hello Worldに置換する class Program { static void Main(stri…

プラットフォーム呼び出しによるデータのマーシャリング

C#

まだ完全には理解できていない部分があります。下記参照元を参考にして とりあえず動くようにはなりましたが、構造体文字列メンバー値が正しく取得できない等 一部おかしなところがあります。 参照元 プラットフォーム呼び出しによるデータのマーシャリング …

列挙処理可能なクラスの実装

C#

列挙クラス定義 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…

C#3.0メモ1

C#

主にLINQまわり1 3.0での省略記法について データ型は型推論により決定される。 その為、省略して書かれていても型はしっかりと決まっている。 クラス定義の省略記法 public class Parson { public String Name { get; set; } public String Sex { get; set;…

.net frameworkに標準でついているロギングクラス群を使ってみた、作ってみた。

C#

【設定ファイル】 アプリケーション構成ファイルを追加して、そこに設定を記述する。 ログ出力判定 出力レベルが、TraceSourceで指定されているSourceSwitchのログレベル以上であるか確認 TraceSourceに指定されているListener毎に以下を確認 出力レベルが、…

進捗表示ダイアログ

C#

見た目 メインフォーム public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void btnSelectDir_Click(object sender, EventArgs e) { FolderBrowserDialog dialog = new FolderBrowserDialog(); //フォルダ選択…

スレッド間の同期取り

C#

下記処理で引っかかり中。デッドロックが回避できない気がしてきた。 右のメインフォーム起動時にワークスレッドを起動させ、メッセージを出してからスレッドをロック。 メインフォームのボタンクリック時のイベントで、ワークスレッドを再開させてからメイ…

等値演算子(==)とEqualsメソッド

C#

2つの値が等しいか調べる、等値演算子(==)とEqualsメソッドの違い: .NET Tips: C#, VB.NET 処理 参照型比較の場合はどちらの比較方法も、同じオブジェクトを参照しているか比較する。 値型比較の場合はどちらの比較方法も、同じ値であるか比較する。 早さ ど…

CompareTo

C#

基本的にCompareToは並べたときの順番を定義したものですので、等価の確認には使用しないほうが良いでしょう。

UnitTest書いてみた

C#

リフレクションの勉強をかねてUnitTestツールを書いてみた。 Formにはテスト一覧表示用のTreeViewとテスト結果出力用のTextBox、テスト実行ボタンButtonを配置する。 CompareToメソッドをGetMethod()で取得する際、目的のクラスとObjectクラスにCompareToメ…

DataGridViewのVirtualModeサンプル

C#

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…

ManualResetEvent

スレッド間のやりとりを実現する。 下記の例では、スレッドBはスレッドAの処理が終わるまで待機する。 MSDNにManualResetEventの配列を使ったサンプルがある。また、WaiteOne()後のリセットを自動で行ってくれる。AutoResetEventクラスも存在する。 考え方・…

readonlyとconstの違い

C#

readonlyは宣言時とコンストラクタ内のどちらかで初期化ができる。 constは宣言時のみ初期化ができる。 readonlyはインスタンス毎に別の定数を作ることができる。

volatile(ボラタイル)

private volatile int count_val = 0; 複数のスレッドから参照される可能性のあるメンバにつける。 これをつけると、コンパイラの最適化の対象にならない。メンバのRead/Writeを行う際に 必ずメンバ変数の実体にアクセスするようになる。 コンパイラの最適化…

スレッドのロック

ロックオブジェクトには同期をとるスレッドから参照した時に一意となるオブジェクトを指定する。 値型を指定した場合にはボックス化が行われて、各スレッドが別オブジェクトを参照することになる。 その為、ロックは行われない。thisオブジェクトを指定した…

スレッドの終了確認

Thread.Join()を使用する。 呼び出しもとスレッドを対象スレッドが終了するまでブロックする。 GUIプログラムでこれを呼び出すと、固まってしまうので注意すること。 そこで下記の用にして対応した。 while(thread.IsAlived()) { Application.DoEvents; }

スレッドの優先順位

ThreadクラスのPriorityプロパティにて設定。 startメソッド前に設定すること。 実際にサンプルを動かしてみたが 優先順位を上げたからといって、そんなに変わるものでは無かった。

WorkerThreadから情報を送信する

デリゲート、イベントを使用してスレッド処理中の状態の変化を送信する。 class Worker { public delegate void ThreadProcessUnitCompleteEventHandler(int state); public event ThreadProcessUnitCompleteEventHandler eventHandler; private bool finish…

デリゲートとイベント

C#

★違い eventをつけて宣言すると、外部ではイベントの追加削除のみだけ アクセスできるようになる。 ★命名規則 種類 命名例 event ○○○EventHandler delegate ○○○CallBack public partial class Form1 : Form { public delegate void processEndCallBack(int s…