Hatena::ブログ(Diary)

当面C#と.NETな記録 このページをアンテナに追加 RSSフィード

2006/2/28 (火)

[][] 実行には30秒掛かります…  実行には30秒掛かります…を含むブックマーク  実行には30秒掛かります…のブックマークコメント

class Set
{
	public void Analyze()
	{
		foreach ( Entity e in list )
		{
			e.Analyze();
		}
		...
	}
}

class Entity
{
	public void Analyze()
	{
		Regex r = new Regex( ... );
		Match m = r.Match( str );
		...
	}
}

みたいなコードが実行に30秒もかかっていて、30秒もかかったんじゃ使い物にならないからどうにかしようとして、

class Set
{
	public void Analyze()
	{
		Regex r = new Regex( ... );

		foreach ( Entity e in list )
		{
			Match m = r.Match( e.Str );
			...
		}
		...
	}
}

みたいなコードにしたら、1秒に縮んだ…(--;)

うへぇ

トラックバック - http://d.hatena.ne.jp/siokoshou/20060228

2006/2/27 (月)

[] 43things  43thingsを含むブックマーク  43thingsのブックマークコメント

http://www.43things.com/

自分のやりたいことや目標なんかをタグ付けして繋がるサイトらしい。ぼ〜っと見てるだけですごく楽しい。

lose weight、stop procrastinating(ぐずぐずしない!)、write a book、Fall in love、travel the world、Kiss in the rain(ロマンチックだぁ) とか。

見てるだけでなんか、やる気が出てくるっていうか、励まされるっていうか、気力が充実してきて無駄に全身に力を込めてみたりしてしまう。たくさんの人の前に進もうとする正の力に満ちあふれているような感じ。いつかこのサイトから元気玉が発射されるね。

ときどき見るようにしよう。

トラックバック - http://d.hatena.ne.jp/siokoshou/20060227

2006/2/26 (日)

[][] 速度比較  速度比較を含むブックマーク  速度比較のブックマークコメント

List<int>のソート速度を比較してみました。

using System;
using System.Collections.Generic;
using System.Collections;

namespace ListSortSpeedTest
{
	public class Program
	{
		private const int Max = 5000000;

		public static void Main( string[] args )
		{
			Random random = new Random();
			List<int> list = new List<int>();

			for ( int i = 0; i < Max; i++ )
			{
				list.Add( random.Next() );
			}

			Test( list );
			Test( list );
			Test( list );
			Test( list );
			Test( list );
			Console.ReadLine();
		}

		private static void Test( List<int> list )
		{
			int[] org = new int[ Max ];
			list.CopyTo( org );

			Console.WriteLine( "" );
			int t0, t1;

			t0 = Environment.TickCount;
			SortOriginal( list );
			t1 = Environment.TickCount;
			Console.WriteLine( "SortOriginal   : " + ( t1 - t0 ).ToString() );
			list.Clear();
			list.AddRange( org );

			t0 = Environment.TickCount;
			SortComparison( list );
			t1 = Environment.TickCount;
			Console.WriteLine( "SortComparison : " + ( t1 - t0 ).ToString() );
			list.Clear();
			list.AddRange( org );

			t0 = Environment.TickCount;
			SortComparison2( list );
			t1 = Environment.TickCount;
			Console.WriteLine( "SortComparison2: " + ( t1 - t0 ).ToString() );
			list.Clear();
			list.AddRange( org );

			t0 = Environment.TickCount;
			SortIComparer( list );
			t1 = Environment.TickCount;
			Console.WriteLine( "SortIComparer  : " + ( t1 - t0 ).ToString() );
			list.Clear();
			list.AddRange( org );

			ArrayList al = new ArrayList( org );
			t0 = Environment.TickCount;
			SortArrayList( al );
			t1 = Environment.TickCount;
			Console.WriteLine( "SortArrayList  : " + ( t1 - t0 ).ToString() );
		}

		private static void SortOriginal( List<int> list )
		{
			list.Sort();
		}

		private static void SortComparison( List<int> list )
		{
			list.Sort( delegate( int x, int y ) { return x - y; } );
		}

		private static void SortComparison2( List<int> list )
		{
			list.Sort( ComparisonMethod );
		}

		private static void SortIComparer( List<int> list )
		{
			list.Sort( new Comp() );
		}

		private static void SortArrayList( ArrayList al )
		{
			al.Sort();
		}

		public static int ComparisonMethod( int x, int y )
		{
			return x - y;
		}
	}

	public class Comp : IComparer<int>
	{
		public Comp() {}

		public int Compare( int x, int y )
		{
			return x - y;
		}
	}
}

タイムは書きませんが傾向は早いほうから順に、SortOriginal、SortIComparer、SortComparison、SortComparison2、SortArrayList でした。

SortComparison と SortComparison2 の差はほとんどなく、ときどき順位が入れ替わります。誤差の範囲内と見てよさそう。

SortOriginal と SortIComparer の差は 3.1〜3.3倍程度。

SortIComparer と SortComparison の差は 1.3倍程度。delegateが.NET2.0でも遅いのかってが知りたくてこれをやってみたんですが、もしかしてメソッドコールと大きな差はなくなったのかな?少なくともWriting Faster Managed Code: Know What Things Costで書かれているほどの大きな差はないようです。う〜ん、興味深い。

比較するのがかわいそうだけどArrayListも入れてあります。ListとArrayListは値型で最大の差が出ると思われるので、一度見てみたかったのです。案の定、すごいことになってます。

ところで、Listのコピーってもっとうまいやり方ないでしょうか?

bakumatsubakumatsu 2006/02/26 14:38 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp02172004.asp

ここにあるサンプルを2.0で実行してみると、デリゲート呼び出しが Interface と同程度になってるのがわかります。感動しました。

siokoshousiokoshou 2006/02/26 16:19 おもしろい情報ありがとうございます。1.1ではデリゲートがインタフェースの1/3程度で、2.0では同程度ですね。これはおもしろい!2.0でデリゲートは早くなっていたんですね。
しかし、DirectCallとInterfaceCallの差がすごいですね…。

トラックバック - http://d.hatena.ne.jp/siokoshou/20060226

2006/2/24 (金)

siokoshou2006-02-24

[] ZedGraph  ZedGraphを含むブックマーク  ZedGraphのブックマークコメント

sourceforgeC# 使ったプロジェクトを見てたらグラフを描くコントロールを見つけました。

http://sourceforge.net/projects/zedgraph/

引用。「ZedGraph is a class library, user control, and web control for .net, written in C#, for drawing 2D Line, Bar, and Pie Charts. It features full, detailed customization capabilities, but most options have defaults for ease of use.」

デモのスクリーンショット貼っておきます。無料ユーザーなのでちっちゃいですが。

なかなか高機能っぽいですね。今のところ使う予定はないので評価はパス…。

トラックバック - http://d.hatena.ne.jp/siokoshou/20060224

2006/2/23 (木)

[] スニペット  スニペットを含むブックマーク  スニペットのブックマークコメント

規定のスニペット一覧

http://msdn2.microsoft.com/ja-jp/library/z41h7fat.aspx

Express でも prop と入力して Tab キーを押せば、「プロパティ宣言およびバッキング フィールドを作成」してくれます。上位エディションではスマートタグで操作できるのかな?

switch スニペットは Enum を展開してくれたりします。びっくり便利。

スマートタグで半自動で using を追加できたりするのも便利。Office ではスマートタグって邪魔だとしか思ってなかったけど、見直しました。

トラックバック - http://d.hatena.ne.jp/siokoshou/20060223

2006/2/22 (水)

[] Vistaの仕様変更点  Vistaの仕様変更点を含むブックマーク  Vistaの仕様変更点のブックマークコメント

IT Proの記事。

【MDC2006】どんなソフトが動かなくなる?---Vistaの重要な仕様変更点が明らかに

UAP改めUACが一番気になります。%PrograFiles%の下に書くのは管理者権限がいるっぽい。

「拡張子がchmのHTML Help 1.xと,拡張子が.hlpであるWinHlp32ファイルが廃止」ってのは初耳。ヘルプは何を使えばよいの?

セッション0の隔離もなにかと影響がありそうですね。セキュリティ関連ソフトが影響大きそうな予感。

メイリオも影響大きそう。VisualStudioもフォント変更するとあちこち見えないところが多くて、なんだかな〜って感じ。ダイアログのサイズ変更できるようにしておけばいいのに。ついでにサイズ変更したら、そのサイズ覚えてほしい。話は脱線したまま終わり。

[] Margin  Marginを含むブックマーク  Marginのブックマークコメント

WinForm の Margin って、つまりデザイン時のスナップ線の長さを指定するものなのね。

http://msdn2.microsoft.com/ja-jp/library/3z3f9e8b.aspx

過度の期待してた…。でも Padding は神機能だ。

(追記)と思ったら、FlowLayoutPanel のような自動でレイアウトしてくれるコンテナでは Margin が有効だった。

トラックバック - http://d.hatena.ne.jp/siokoshou/20060222

2006/2/17 (金)

[] Multi-Touch Interaction Research  Multi-Touch Interaction Research を含むブックマーク  Multi-Touch Interaction Research のブックマークコメント

やねうさんのとこから。マイノリティリポートのあれ。すごすぎ!大感動!

http://www.youtube.com/watch?v=iVI6xw9Zph8

大真面目にあれを研究してるって噂は聞いてたけど、こんなにすごいとは!これは将来確実にきますね。きてくれなきゃ嫌だ。

インターフェイスがすんごくよくできてて、移動、拡大、縮小、回転が実に直感的にできてるのがすごい。

これ見ると、マウスやDSのペンが1本指で操る不自由なデバイスだって気付いてしまった。マウスはこれに取って代わられますね。

これが普及するとデータの「見える化」から一歩進めて、「触れる化」が重要になったりして。表形式でデータを見せると触りづらいから、カード型にしてねってな感じで。んで、カードを自由に動かしたり配置できたりして、あっちに動かしたりこっちに動かしたりって、マイノリティリポート風に。カード型のデータを自由に配置できるようになったとしたら、どんな機能がどんな風に見えたり使えたりしたら便利なんだろう。そこらへんがこのインターフェイスが示してくれたこれからの研究課題なのかな。う〜ん、わくわくしてくる。

トラックバック - http://d.hatena.ne.jp/siokoshou/20060217

2006/2/15 (水)

[] GDNJが…  GDNJが…を含むブックマーク  GDNJが…のブックマークコメント

http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=41951

MSDNフォーラムに移行して、GDNJは終了。過去ログはダウンロードなどによる提供を考えているそうです。

でもねぇ…。今ダウンロードできる人はいいけど、将来.NETに入ってきた人が読めないのがもったいないよね。公開し続けたほうが便利でいいのに。

2005で.NETがかつてなく盛り上がってるときに.NETの情報の山をMS自ら消してしまうとは…。permalinkの価値を分かってないなぁ。もったいな〜い。

古い書籍が簡単に手に入らないのと一緒で、ネット上の情報も古いものは入手困難になるものですね。

トラックバック - http://d.hatena.ne.jp/siokoshou/20060215

2006/2/14 (火)

[][] C#によるWindowsのバージョン判定方法  C#によるWindowsのバージョン判定方法を含むブックマーク  C#によるWindowsのバージョン判定方法のブックマークコメント

http://support.microsoft.com/kb/304283/

メモ

[] わずか数十人  わずか数十人を含むブックマーク  わずか数十人のブックマークコメント

http://blog.japan.cnet.com/nakajima/archives/002624.html

Windows95は「わずか数十人で作った」そうな。マジっすか。すげぇ。

mariccimaricci 2006/02/15 00:59 2003とか、XP(x64)とかは判定に困ったような・・

siokoshousiokoshou 2006/02/15 01:30 ホントだ、書いてないですね(^^; 2003は5.2なのかな?R2は???

mariccimaricci 2006/02/16 08:16 http://www.uchukamen.com/Programming/WindowsVersion/index.htm
ここの参考書のリンクが答えになってますね。

かなり面倒です・・

siokoshousiokoshou 2006/02/16 23:19 なるほど!XP(x64)は…w
KBのご意見入力欄に2003やx64の判定コードもお願いしますって投稿しておきました。そのうちいつかきっと…。

トラックバック - http://d.hatena.ne.jp/siokoshou/20060214

2006/2/2 (木)

[][] 圧縮つきWebClientクラス  圧縮つきWebClientクラスを含むブックマーク  圧縮つきWebClientクラスのブックマークコメント

WebClient クラスは2.0でかなり便利になってますね。非同期に使えるようになったんで、html を落としてファイルに保存する程度ならもうこれだけでいいね。

非同期に使う方法も .NET2.0 で新しく出てきた「イベントベースの非同期パターン」ってやつで超簡単。従来の IAsyncResult パターンはめんどくさかったけど、イベントベースのパターンは基本的には「ほにゃららAsync」メソッドを呼んで「ほにゃららCompleted」イベントで終了通知を受けるって感じでめちゃ簡単。

非同期の話はさておき、WebClient クラスをそのまま使うと Gzip 圧縮してくれないんで、ダウンロードがすごい遅い。帯域幅は大切にってことで圧縮する WebClient クラス作ってみました。Deflate圧縮ってのも対応してます(Deflateってこのクラス書くときに始めて知ったw)。

使い方は WebClient の代わりにこのクラスを使うだけ。そのほかの使い方はまったく一緒です。なにげに User-Agent 偽装してるけどw

User-Agent、Accept、Accept-Language は好きにいじってください。


using System;
using System.Net;

namespace SioKoshou
{
  public class CompressedWebClient : WebClient
  {
    protected override WebRequest GetWebRequest( Uri uri )
    {
      WebRequest webRequest = base.GetWebRequest( uri );
      HttpWebRequest httpWebRequest = webRequest as HttpWebRequest;
      if ( httpWebRequest == null ) return webRequest;

      httpWebRequest.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*";
      httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";

      httpWebRequest.Headers[ "Accept-Language" ] = "ja,en-us;q=0.5";
      httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
      return httpWebRequest;
    }
  }
}

余談だけどIE7β入れたらGETで「UA-CPU: x86」ってのも送ってた。32bitIEと64bitIEで違ったりするのかも。

トラックバック - http://d.hatena.ne.jp/siokoshou/20060202

2006/2/1 (水)

[]アプリケーション設定 その4 アプリケーション設定 その4を含むブックマーク アプリケーション設定 その4のブックマークコメント

その3は長すぎた。まあそれはおいといて。

ユーザー設定はその3で書いたように app.config のセクション名と読み書きするクラス(ApplicationSettingsBaseを継承したクラス)の名前が一致していなくても読み書きできた。

今度はアプリケーション設定で同じようなことをしてみたら、こっちはクラス名とセクション名が一致してないと読めなかった。

ユーザー設定では名前が不一致でも読み書きできて、これでいいのかなぁってひっかかってたけど、やっぱり合わせとくのがいいっぽい。

app.config で

<section name="Hoge.Properties.CustomProperties" ...

としたら、読むコードは namespace Hoge.Properties の CustomProperties クラスにするってこと。

しかし、これはどう?、これならどう?って、動くかどうか実装をちまちま調べてるけど、どこかに詳しい解説記事でもないかなあ〜。ご存知の方、コメントくださいませ。

[] 上の続き  上の続きを含むブックマーク  上の続きのブックマークコメント

ふと気づいたけど、アプリケーション設定は読み取り専用で、ユーザー設定は読み書きOK。読み取り専用のアプリケーション設定を読む ApplicationSettingsBase 継承クラスはいくつあっても何の問題もないけど、読み書きOKなユーザー設定に対してだと複数あるとややっこしい問題が起こるね。

もしかしてユーザー設定でセクションの名前が違っても一つの ApplicationSettingsBase 継承クラスから操作できるのはわざとなのかな?

トラックバック - http://d.hatena.ne.jp/siokoshou/20060201
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 06 | 09 | 11 | 12 |
2007 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 12 |
2009 | 01 | 03 | 04 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 07 |
2011 | 04 | 07 | 10 |
2012 | 04 | 12 |
2013 | 08 |
2014 | 03 | 08 |
2017 | 09 |