自分磨きのITノート

プログラミング(C#、VB.NET)言語やデータベースの役立つ情報を初心者から中級者向けに発信します。

VBのIsNumeric関数は許容範囲が広いので注意必要[VB.Net,C#]

皆さんはいつもプログラミングで数値チェックをどのようにされていますか?

VBで数値チェックといえば、IsNumeric関数が有名ですが、単純にこれだけでは不十分なことが多く、意図しない不具合発生することもあります。
プログラミングでは、値のチェックはアプリケーションが正常に動作を続ける上で非常な重要な部分です。

.Netだと、Double.TryParseメソッド正規表現でチェックをされているのだと思います。しかし、私個人的な問題なのですが、正規表現は複雑になるとぱっと見わからなくなってきて体が受付ません^^;なので、IsNumeric後などにゴリゴリチェックロジックを書いています(という記事です)。

VB.NetだとMicrosoft.VisualBasic名前空間にあるIsNumericメソッドはつい便利なので使用してしまいがちです。単純にIsNumericだけのチェックで終わってはないでしょうか??

IsNumericの引数に
  • IsNumeric("123")の大文字
  • IsNumeric("10e3")の桁を表す文字
  • IsNumeric("&H12")の16進数を表す文字
も、Trueとして返ってきます。

これだと、その数値をそのままデータベースの決まったサイズに入れたりすると、エラーが発生することがあります。大文字だとコード体系のフィールドにしたい場合使えません。
やはり、IsNumeric関数(TryParseも同じ)の後に数字の範囲チェックや文字列チェックなどは欠かせないですね(>o<)

これがよい策かわかりませんが、私がよく使っている数値文字列チェックのロジックを晒しておきます。最後にC#バージョンあり。

数値文字列チェック

続きを読む

C#入門-Taskを使った非同期(マルチスレッド)プログラミングまとめ

今回は、C#で非同期プログラミングを作っていきたいと思います。

最近ではあまり見かけませんが、.Netで「スレッド」と検索すると検索結果にThreadクラスを使ったサンプルソースコードに出会うことがあります。しかし、Threadクラスは、.Net初期のバージョンからあるスレッドの記述方法です。.Net4.0以上のバージョンである場合、Taskクラスを使ったほうがオブジェクトの起動速度や今どきのプロセッサを効率よく使用できます。

Taskクラスは、あくまで1つの仕事(アクション)を定義するものにすぎません。しかし、マルチスレッド(非同期)として動作させることができるので、よく考えてプログラミングする必要があります。

C#言語はプログラマーに分かりやすくマルチスレッドを使用してもらうために進化してきたプログラミング言語です。まだまだ進化は続くと思います。
私もまだまだTaskについては学習中ですので、共に勉強出来ればと思います。

今では色々なサイトでTaskのサンプルソースを手に入れることが出来ます。しかし情報量が多く、簡単なサンプルが少なかったりします。そこで、なるべく簡単な説明でまとめてみました。


簡単なTaskクラスの例

続きを読む

DataGridViewの非バインドとバインドで表示速度がどれくらい違うのか計測

DataGridViewListViewのコントロールは、数万行のデータになってくると表示に時間がかかってしまいます。これは、描画処理が大量に発生して遅くなっているようです。

ListViewは、BeginUpdate()~EndUpdate()で描画を止めれば多少なり速くはなりますが、DataGridViewは、SuspendLayout()~ResumeLayout()を行ってもあまり効果がない場合があります。
また、行や列のAutoSizeをAllCellsなど指定すると、すごく遅くなるので行追加時はAutoSizeを切るなどして避けたいところです。

その他にDataGridViewの速度改善を調べてみると、手動で行を追加する方法とDataSauceに引き渡してバインドする方法とで速さに違いが出るそうです。実際に速度に違いがあるのか未検証だったので試してみました。

以下のような4パターンの検証です。

180217_1_datagridview_bind

①(非バインド1)Rows.Add()で1行ずつ追加していくパターン
②(非バインド2)Rows.AddRange()で一気に追加するパターン
③(バインド1)DataTableをバインドするパターン
④(バインド2)独自クラスをバインドするパターン


①(非バインド1)Rows.Add()で1行ずつ追加していくパターン

続きを読む
スポンサードリンク
自己紹介
【管理人】
なみやん
【コメント】
プログラムを組むことが大好きな30代男性。IT系の仕事を10年ちょいやっています。このブログを通して知識を人に伝えることによって、自分をさらに磨こうと精進しています。応援よろしくお願いします。
免責事項
当サイトで紹介しているサンプルソースコードは自由に使用いただいても結構が、自己責任でお使いください。また、記事の内容が主観的であったり、努力していますが正しくなかったりする場合がございます。読者本人の判断にお任せいたします。