ネットワークアダプタの有効/無効をリアルタイムに検知する方法です。
http://codezine.jp/article/detail/4702?p=3
2010年11月04日
2010年10月13日
RFC非準拠のメールアドレスの扱い
.NET4では、RFCに準拠しないメールアドレス(ピリオドが連続しているメールアドレスなど)が扱えるようになっています。
対象は、MailAddressクラスです。
.NET 3.5までは、MailAddressクラスにRFCに準拠しないアドレスを指定すると例外が出ましたが、.NET4では例外が出ることなく扱え、メール送信まで行うことができるようです。
http://msdn.microsoft.com/ja-jp/library/system.net.mail.mailaddress.aspx
対象は、MailAddressクラスです。
.NET 3.5までは、MailAddressクラスにRFCに準拠しないアドレスを指定すると例外が出ましたが、.NET4では例外が出ることなく扱え、メール送信まで行うことができるようです。
http://msdn.microsoft.com/ja-jp/library/system.net.mail.mailaddress.aspx
2010年09月30日
現在実行中のメソッド名と、クラス名を取得する方法
MethodBaseクラスのGetCurrentMethodメソッドを呼び出すことで、現在実行中のメソッド名を取得することができます。
http://msdn.microsoft.com/ja-jp/library/system.reflection.methodbase.getcurrentmethod.aspx
戻り値はMethodBaseクラスであるため、さらに以下のコードで、どのクラスのどのメソッドを実行中かも取得できます。
MethodBase.GetCurrentMethod().DeclaringType.FullName;
これを応用すれば、実行中のメソッド名などを容易にログに記録できます。
ソース中にメソッド名をべた書きしていると、メソッド名のリファクタリングを行ったときにも容易に対応できます。
http://msdn.microsoft.com/ja-jp/library/system.reflection.methodbase.getcurrentmethod.aspx
戻り値はMethodBaseクラスであるため、さらに以下のコードで、どのクラスのどのメソッドを実行中かも取得できます。
MethodBase.GetCurrentMethod().DeclaringType.FullName;
これを応用すれば、実行中のメソッド名などを容易にログに記録できます。
ソース中にメソッド名をべた書きしていると、メソッド名のリファクタリングを行ったときにも容易に対応できます。
2010年09月19日
EntityFrameworkでSQL関数にマッピングされるCLRのメソッド
EntityFrameworkでSQL関数にマッピングされるCLRのメソッドの一覧が、下記にまとめられています。
これで、EntityFrameworkを使ったクエリ式に書けるメソッドを把握することができます。
http://msdn.microsoft.com/ja-jp/library/bb738681.aspx
これで、EntityFrameworkを使ったクエリ式に書けるメソッドを把握することができます。
http://msdn.microsoft.com/ja-jp/library/bb738681.aspx
2010年09月01日
ASP.NETでボタンの2度押しを防止する方法
ASP.NETでは、ボタンの2度押しによって本来は1回だけ行いたい処理が、複数回サーバーで実行されてしまう問題が知られています。
ショッピングサイトで、購入ボタンを複数回クリックするなど、本来1回しか行われない処理が複数回実行されてしまう場合があります。
これを簡易的に回避する方法があります。
ボタンコントロールのOnClientClickプロパティに、以下のようにJavaScriptコードを設定します。
これにより、2回目以降のボタンクリックでは、ポストバックが発生しないようになります。
この方法では、ボタン一つ一つに対してOnClientClickプロパティの設定が必要になりますが、画面上の全てのボタンで2度押しを防止させたい場合には、下記ページのコードが参考になります。
http://d.hatena.ne.jp/itaosan/20061225/1167025092
最後に・・・ここで紹介した方法は、クライアント側での簡易的な回避方法にすぎません。
JavaScriptをOFFにされた場合や、直接HTTP通信を送り込まれた場合などの対応には、サーバー側での本格的な対策が必要です。
ショッピングサイトで、購入ボタンを複数回クリックするなど、本来1回しか行われない処理が複数回実行されてしまう場合があります。
これを簡易的に回避する方法があります。
ボタンコントロールのOnClientClickプロパティに、以下のようにJavaScriptコードを設定します。
これにより、2回目以降のボタンクリックでは、ポストバックが発生しないようになります。
この方法では、ボタン一つ一つに対してOnClientClickプロパティの設定が必要になりますが、画面上の全てのボタンで2度押しを防止させたい場合には、下記ページのコードが参考になります。
http://d.hatena.ne.jp/itaosan/20061225/1167025092
最後に・・・ここで紹介した方法は、クライアント側での簡易的な回避方法にすぎません。
JavaScriptをOFFにされた場合や、直接HTTP通信を送り込まれた場合などの対応には、サーバー側での本格的な対策が必要です。
2010年08月27日
UnicodeとシフトJISとで、文字の比較順序が異なる
二つの文字を、UnicodeとシフトJISとでそれぞれ文字コード順で比較したときに、結果は一般的に同じとは限りません。
例えば、Unicodeで比較したときあれば"本">"部"ですが、シフトJISで比較した場合は"本"<"部"となります。
逆に、文字コード順にソートされていることが分かっているが、どの文字コードでソートしているかが分からないとき、「本」「部」の2文字で比較すれば判断することが可能になります。
名づけて、「本部作戦」とでも呼ぶのがいいでしょうかね。
例えば、Unicodeで比較したときあれば"本">"部"ですが、シフトJISで比較した場合は"本"<"部"となります。
逆に、文字コード順にソートされていることが分かっているが、どの文字コードでソートしているかが分からないとき、「本」「部」の2文字で比較すれば判断することが可能になります。
名づけて、「本部作戦」とでも呼ぶのがいいでしょうかね。
2010年08月23日
.NET4で簡単にマルチスレッド処理を実現する
.NET4では、System.Threading.Tasks名前空間にあるParallel.Invokeメソッドを使うことで、複数のメソッドを簡単にマルチスレッドで実行することができる。
ただし制限として、引数なし、戻り値voidのメソッドに限られる点に注意。
【参考】http://www.atmarkit.co.jp/fdotnet/csharp4/csharp4_02/csharp4_02_01.html
このページでは、CPUに存在するコア数を超えてマルチスレッド処理を行った場合、逆にパフォーマンスが下がることがあることも指摘している。これも合わせて参考になる。
さらに、.NETで稼動コンピュータのCPUコア数を知る方法もあるようです。
【参考】http://gurizuri0505.halfmoon.jp/20080806/2423
【参考】http://social.msdn.microsoft.com/Forums/ja-JP/netfxgeneralja/thread/eeed7149-6a36-4c64-a41f-5d93600e821a
これを併用すれば、搭載されているCPUコア数を元に最適なスレッド数で処理を実現するコードも書けそうです。
ただし制限として、引数なし、戻り値voidのメソッドに限られる点に注意。
【参考】http://www.atmarkit.co.jp/fdotnet/csharp4/csharp4_02/csharp4_02_01.html
このページでは、CPUに存在するコア数を超えてマルチスレッド処理を行った場合、逆にパフォーマンスが下がることがあることも指摘している。これも合わせて参考になる。
さらに、.NETで稼動コンピュータのCPUコア数を知る方法もあるようです。
【参考】http://gurizuri0505.halfmoon.jp/20080806/2423
【参考】http://social.msdn.microsoft.com/Forums/ja-JP/netfxgeneralja/thread/eeed7149-6a36-4c64-a41f-5d93600e821a
これを併用すれば、搭載されているCPUコア数を元に最適なスレッド数で処理を実現するコードも書けそうです。
2010年08月17日
ストリームの内容を別のストリームにコピーする
あるストリームから読み出したデータを、別のストリームに書き込む処理が、.NET4から1つのメソッドで簡単に行えるようになりました。
StreamクラスのCopyToメソッドを使えばよいとのことです。
私はストリーム間のデータ転送処理を書くことも多いので、この方法でちょっとは楽になりそうです。
【参考】ストリームを簡単にコピーするには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/1047streamcopyto/streamcopyto.html
StreamクラスのCopyToメソッドを使えばよいとのことです。
私はストリーム間のデータ転送処理を書くことも多いので、この方法でちょっとは楽になりそうです。
【参考】ストリームを簡単にコピーするには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/1047streamcopyto/streamcopyto.html