情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | 編集

C#での、正しいマルチスレッドプログラムの書き方を求めて(2011年11月版) このエントリーを含むはてなブックマーク

C#におけるマルチスレッドプログラミングの正しい作法が知りたい

そんなとき、やっぱりたよりになるのはmsdnだよねということで、msdnライブラリから、意外と散らばっているマルチスレッド関連ページをかき集めて、参考になりそうな資料を抜粋し、一覧にしたのがこのエントリです。

この記事は2009年の記事をベースに、一覧の内容を大幅にアップデートしたものです。内容は新しくなり、量も増えました。

丁寧な解説が良い

集めた資料にはマルチスレッド用のデザインパターンやガイドライン、 基礎的な用語の解説などが充実しており、とても参考になります。 クラスの解説だけでなく、 こういう場合はどれを使った方がよいという指針が明らかにされていて頼もしい限りです。

一つ一つ読むもよし、また、なんとなく興味を惹かれるタイトルのページを開いてみるのも面白いと思います。

スポンサーサイト
C# | コメント:0 | トラックバック:0 | 編集

C#での、正しいマルチスレッドプログラムの書き方を求めて このエントリーを含むはてなブックマーク

注意:.NET Framework 4、Visual Studio 2010に対応してアップデートした記事はこちら→「C#での、正しいマルチスレッドプログラムの書き方を求めて(2011年11月版)

C#におけるマルチスレッドプログラムの作成方法は、たくさんのホームページで紹介されています。しかし、それらは正しく動いたとしても、それがC#や.NET Frameworkを作成した人々の期待したコードであるかどうかは残念ながら、コードを見るだけでは分かりません生意気なこと言ってすいません

また、BackgroundWorkerという、簡単に別スレッドを作成してメソッドを実行する方法も用意されてはいますが、それで満足していいのかという欲求もあります。より高度なスレッドの扱い方を会得したい。

そんなとき、やはり頼るべきはMicrosoft謹製 msdnライブラリでしょう。

しかし、実際にmsdnライブラリでマルチスレッドプログラミングついて調べていると、リンクが散らばっていて、どこを見ればいいのか分かりません。

そこで、msdn内のマルチスレッドに関するページをまとめてみました。msdnは重く、検索に時間がかかるので、このページをブックマークしておくと楽だと思います。

C# | コメント:0 | トラックバック:0 | 編集

C#でローカルのデータベースを利用したい このエントリーを含むはてなブックマーク

C#/.NETから、Webを利用するのでも、サーバを立てるのでもない、デスクトップアプリケーション用のローカルデータベースを利用したいと思った。

そこで、候補は2つ。

  • SQL Server Compact 3.5
    Microsoft純正だけど、とにかく新しく、人気がない。情報も少ない。
  • System.Data.SQLite
    SQLite自体はとてもローカルデータベースとして人気だし、純正じゃないけど、機能はしっかりしているみたい。公式の情報はmsdnに比べれば少なめかもしれないが、SQLiteブランドは強い。

ということで、System.Data.SQLiteを採用することに。

なんとなく、各サイトを見ていると、ADO.NET 2.0という数字が気になり、.NET Framework 2.0で作っているところを見かけたりで、不安でしたが、とりあえず、サンプルのようなコードを、自分で作った.NET Framework 3.5のプロジェクト上でも動かすことはできました。だから、気にせず使えるのかなぁと思っておきます。

SQLのことは全然詳しくないけれど、データベース自体はおもしろそうだし、作れるアプリケーションの幅が広がるので、ちょっとがんばってみようかと思います。

.NET | コメント:0 | トラックバック:0 | 編集

JPEG(Exif)など、画像メタデータ(タグ)に関する資料リンク集 このエントリーを含むはてなブックマーク

Exif,TIFF(JPEG)などのメタデータ(タグ)に関する資料をまとめてみました。 基本的には、仕様書を参考にしてください。 仕様書を見る前に、紹介ページを見ると、全体の把握に役立ちます。

C#/.NETにおける、BMP、GIF、EXIF、JPG、PNG、TIFF画像のメタデータを取得する方法については、 「C#(.NET)でJPEGファイルのExifを読み取る方法」をご覧ください。VBも.NETならC#と同様です

Exif | コメント:0 | トラックバック:0 | 編集

C#(.NET)でハッシュテーブルを利用する方法の基本と注意点 このエントリーを含むはてなブックマーク

C#(.NET)でハッシュテーブルを利用するときに関するメモ

正直、msdnなどを見えればいいのですが、毎回みるのも面倒なので、基本的なことをここに書いておきます。以下、ジェネリクスを利用したハッシュテーブルを紹介し、ジェネリクスでない場合については触れません。特に制限された開発環境でない限り、ジェネリクスを利用しない意味はないと思われます。

ハッシュテーブルを実装したクラス

そもそもHashテーブルを表すインターフェースはIDictionary<TKey, TValue>。 実装されているクラスは、

  1. Dictionary<TKey, TValue>クラス
  2. SortedDictionary<TKey, TValue>クラス
の2つです。

データを保存(追加・格納)する方法

データを保存する方法は基本的に2つ。

  1. Add(TKey key, TValue value)メソッドを利用する
    シンプルな方法です。keyとvalueのペアを指定するだけ。すでに利用されているkeyに対してvalueを重複して追加しようとすると、ArgumentExceptionがスローされます。
  2. インデクサを利用する
    インデクサを利用するとは、
    dictionary["key"] = new TValue();
    こんな感じです。実際、このようにすると、Add("key", new TValue());と同じように追加されますが、実は、大きな違いがあります。それは、keyが重複していても、例外を返さず、上書きされるということです。例外が帰ってくるのが面倒だったり、そもそも重複していないかチェックするくらいなら、インデクサを使った方がいいでしょう。

データを取得する方法

データを取得する方法は2つ。

  1. Itemプロパティを利用する
    基本的な取得方法はこれ。Keyを指定すると、Valueが返ってきます。わかりやすい。ただし、C#においては、インデクサとして実装されていることに注意。
    TValue value = dictionary["key"];
    という書き方で利用します。インテリセンスを利用して「Dictionaryから要素を取得するメソッドがないぞ?」と思った人。インデクサだから見つからないわけです。
  2. TryGetValueメソッドを利用する
    これは、Keyに対応する値が、保存されているかあやしい場合に利用します。Itemプロパティを利用すると、Keyに対応する値がない場合例外が返されて余計な時間がかかってしまいます。そこで、Keyに対応する値が保存されていない場合が多いと考えられるときはTryGetValueを利用します。このメソッドは例外を返さないので、オーバーヘッドが小さくできます。例外を返さない代わりに、値が保存されていないときは規定値(0, false, null)が返ってきます。

データを削除する方法

追加、取得、ときたら、削除ですね。削除する方法は1つ。

  1. Remove(TKey key)メソッドを利用する。 keyに対応するエントリ(key-valueペアのこと)を削除するには、
    dictionary.Remove("key");
    とすればよいことになります。削除できたときtrueを返します。また、削除できなかったとき、特に、keyが見つからないとき、falseを返します

まとめ

基本的な操作は、以上のメソッドやプロパティで行えます。特に、インテリセンス(コード補完機能)にたよっていると、インデクサの存在に気づけないこともあるので、注意が必要です。

それぞれの項目についての詳細は、リンク先のmsdnライブラリをご覧ください。リンク先は、.NET Framework 3.5 になっていますが、リンク先から別バージョンへ簡単に移動できます。

.NET | コメント:0 | トラックバック:0 | 編集
 | HOME |  OLD >>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。