2006年7月26日水曜日

やっぱりString.Formatは遅かった

 log4netに渡すログメッセージを用意するために、あまり考えずにString.Formatを使いまくってたら、本来の機能に支障をきたすほどに遅くなってしまった。Cでもprintfは重い関数の代表みたいなもんだから、当たり前といえば当たり前。数10msの遅れが致命的になる部分で問題が発覚したので、とりあえず文字列の埋め込みしかやってない部分をCapacity指定付きのStringBuilderに置き換えてみた。プロファイラを使って測定したわけではないが、効果は上がっている模様。期待通りの動作をしてくれている。一行で済んだ部分がAppendの連続で見苦しくなったけど、実行時間には代えられない。
 Classをsealedにするとプロパティのアクセスが速くなると言う話も見かけたので、実装が枯れてきたらそっちも試してみよう。

2006年7月21日金曜日

eAccelerator入れた

 PHPが速くなるというeAcceleratorを入れてみた。遅くは無いようだが、前からこんなもんだっけ?元々遅いと感じていたわけではないので、速くなった実感が無い。

2006年7月11日火曜日

Relaxerのバグ修正

まだ作者には未報告。無くさないようにメモ。
.origのバージョンはbeta20050810.zipだったと思う。


--- org/relaxer/Relaxer/xsd/XsdGenerator.java.orig 2005-05-04 08:27:06.000000000 +0900
+++ org/relaxer/Relaxer/xsd/XsdGenerator.java 2006-06-02 13:37:05.422488100 +0900
@@ -276,7 +276,7 @@
Element element = _makeElement(doc, "attribute");
element.setAttribute("name", aSlot.getAttrName());
if (!choice && aSlot.isRequired()) {
- element.setAttribute("use", "true");
+ element.setAttribute("use", "required");
}
_makeDatatype(element, aSlot.getDatatype());
parent.appendChild(element);
@@ -299,7 +299,7 @@
Element element = _makeElement(doc, "attribute");
element.setAttribute("name", aNode.getAttrName());
if (!choice && isRequired_(aRef)) {
- element.setAttribute("use", "true");
+ element.setAttribute("use", "required");
}
_makeDatatype(element, aNode.getDatatype());
parent.appendChild(element);

2006年7月5日水曜日

partial classで失敗

 C#のpartial classべんりと喜んでたら失敗した。
 スキーマコンパイラのxsdが吐いたコードに「ちょこちょこっ」とメソッドを追加するのにpartial classを使っている。今日はメソッドと同じようにして引数ありのコンストラクタを一個追加したのだが、これがいけなかった。暗黙のうちに利用できるデフォルトコンストラクタが無効化されてしまい、デシリアライズでコケるようになってしまった。
 自分のやったことは棚に上げて「スキーマを変えてないのに、なぜコケる?」と原因に気が付くのに手間取り、これで小一時間はまってしまった。引数無しコンストラクタを明示的に定義して解決。

C#のpartial class

 XML Schemaから変換したクラスにメソッドを追加する際に便利。フォームデザイナだけに使わせておくのはもったいない。クラスビューでメンバーを一望できるので、実装が分散してしまうデメリットは感じられない。