Hatena::ブログ(Diary)

Return to Saisse’s Wiki このページをアンテナに追加 RSSフィード

2011-02-21

久しぶりに

00:26 | 久しぶりにを含むブックマーク 久しぶりにのブックマークコメント

はてな書いちゃった。約一年ぶりか...

StringBuilderを使うべきかどうか。

| 00:25 | StringBuilderを使うべきかどうか。を含むブックマーク StringBuilderを使うべきかどうか。のブックマークコメント

なんか、StringBuilderを使った方が速いって勘違いしている人がいるので、ぐぐってみたら↓あたりが....

この辺、StringとStringBuilderの特性を知らないで計測しているので、Stringの+演算子ががとんでもなく遅いことになっていますけど、全くそんなことないです。問題は2つあって一つがStringの書き方で最適化が効かないような書き方をしている点とStringが不得意な巨大なStringを作り出している点。

一般的にあるような文字列連結なら、最適化が効いてStringBuilderと同じようなコードに置き換えてくれるので、うん百倍の性能差が出ることは無いです。

import java.util.Date;

public class StringPerformance {
	
	public static void main(String[] args) {
		
		long start = 0;
		long loop = 1000000;

		start = now();
		for(int i = 0; i < loop; i++) {
			String s = "abcde";
			s += "1234567890";
			s += "うほうほ";
		}
		long stringResult = now()- start;
		
		start = now();
		for(int i = 0; i < loop; i++) {
			StringBuilder sb = new StringBuilder("abcde");
			sb.append("1234567890");
			sb.append("うほうほ");
			sb.toString();
		}
		long builderResult = now()- start;
		
		start = now();
		for(int i = 0; i < loop; i++) {
			StringBuffer sb = new StringBuffer("abcde");
			sb.append("1234567890");
			sb.append("うほうほ");
			sb.toString();
		}
		long bufferResult = now()- start;
		
		
		System.out.printf("String:%d, Builder:%d, Buffer:%d\n", stringResult, builderResult, bufferResult);
		
	}
	
	private static long now() {
		return new Date().getTime();
	}

}

で、結果。

String:163, Builder:78, Buffer:114

百万回実行しての差がこれだけなので、ほとんど無視してしまっていいレベルの性能差です。というかリテラルを連結する場合などは+演算子でつなげた方が速い場合もあります。なんで、Stringを連結する場合は素直に演算子でつなげて記述性を優先させておきましょう。

StringBuilderを使うべき箇所lはテンプレートエンジンを実装するときとか、巨大なStringを効率よく扱いたい場合とか特別に性能に配慮したい場合だけで十分です。

ちなみに、このバッドノウハウが広がったのは1.4系の頃に最適化の頭が悪くて、Stringの演算子を使った場合にStringBufferオブジェクトを作りまくっている問題があって、演算子の代わりにStringBufferを使うと40倍速い頃があったのが原因で今のVMはそんなことないので−。

2010-04-21

MM-BTSH3のビープ音

| 01:53 | MM-BTSH3のビープ音を含むブックマーク MM-BTSH3のビープ音のブックマークコメント

週末に買ってきたBTレシーバ。iPod touch用に買ってきたのはいいのですが、電源をON/OFFするごとに本体がビープ音がなるので何この仕様ーーありえーんとか思ってたら消す方法がわかったのでその方法を書いときます。

1.電源を入れる

2.ボリュームの+-を同時に押す。

3.短く3つピピピッって鳴ったら終了。

実はマニュアルに載ってます。

http://www.sanwa.co.jp/support/setsumeisyo/download.asp?file_name=MM-BTSH3BK_W.pdf

で、晴れて快適なワイヤレス環境にはなったのですが、iPod君はプロファイルで対応していないので、再生/停止とボリュームコントロールくらいしかできません。マイクはついてますがヴォイスコントロールとかも無理です。

この辺はApple頑張ってよーと思わないでもないですが、本体を出さなくても停止できるだけで全然使い勝手が違うんですよね。アプリをいじるのにもコードが邪魔ならないし。

2010-04-02

ObjectDockが

07:32 | ObjectDockがを含むブックマーク ObjectDockがのブックマークコメント

いつの間にかバージョンアップしてた。

http://www.stardock.com/products/ObjectDock/

betaなのにお金取っちゃうの?

2010-03-08

雲に興味がわかない理由。

| 01:41 | 雲に興味がわかない理由。を含むブックマーク 雲に興味がわかない理由。のブックマークコメント

なんか、世間一般的にはクラウドクラウドって騒いでいるのですが、いまいち手を出してみようって気にならないんですよね。

で、理由を考えてみたんだけど。

ベンダーロックされた技術がイヤ。知識の使い回しが効かないし、一度始めてしまったらデータを移行できないってリスクが高すぎるような。

・コスト。クラウドの値段って単純に電気代に比例するはずなんだけど、昨今の環境の周りの動きを見ていると、仮に電気代が2倍になった場合にタダで使ってねとか言ってるのは大丈夫なのか?とか。

Googleが好きくない。

・技術的にはどちらかというとできることが増えるというよりは制限をかけてスケールを確保ししているという意味で後退・単純化しているので、情報が安定してからキャッチアップしたほうがよさげ。

・結局はAPIの呼び出しになるんじゃない?

・最終的にはPrivateでClosedなマシン数が少ない環境でスケールするクラウドと、完全にオープンでベンダ非依存の大規模なクラウドの2つに二極化していくと思うので、今あるのってそのどっちでもない気がする。

暇すぎてしょうがない状態になったら手を出すかもだけど、とりあずScalaQTやっておくかなー。

2010-03-05

今更ながら

| 00:58 | 今更ながらを含むブックマーク 今更ながらのブックマークコメント

ついったーはじめてみたけど...

とりあえず読んでるだけ−。これって楽しくなるのか?

>追記

アカウントhttp://twitter.com/nakanishiyasuo です。