いま仕事でExcel 2003ワークシートのXMLスプレッドシート出力を別なXMLに変換するXSLTが必要で、Visual Studio 2005でガシガシ書いてるんだが、これがまた遅い。処理が遅すぎる。
XSLT 1.0はExcel表のようなデータ構造に対してちょっと複雑なことをさせようとすると、コードが再帰処理の塊にならざるを得ないみたいなんだけど、それでコードを組んで実行を開始すると結果が出るまで6分近くの待ち時間(このログも待ちながら書いてる^^;)。
もうどれだけの回数繰り返してることか。
ぐぅぅ。。。
時間のかかる処理を飛ばして主要情報のデバッグ出力だけにすれば速いんだけど、今はもう「これで行けるはず」って所まで進んでるから、全処理を流して確認しないといけない。
むー。
なんだ、この6分待った挙げ句に出るエラー。
XML の変換中に RemotingException が発生しました。
詳細については出力ウィンドウを確認してください。
出力ウィンドウを見ると、
RemotingException
-----------------
オブジェクト '/4aab5668_eab6_45f9_b360_8984698d2b40/77mp2odwthrdcvnkqpm+gemx_225.rem' が切断されたか、サーバーに存在しません。
だって。
MSDNで調べても
RemotingException
リモート処理中に何かが失敗すると、スローされる例外。
「何か」じゃわからんのじゃコラ(八つ当たり)!ww
リモートってことは、もしかして何らかのローカルサービスにリモート接続して変換処理走らせてて、その接続がタイムアウトしてんのかなぁ。
自信はないんだけど、
ここ(O'Reilly書籍Preview)を見てみる限りそれっぽくて、だとしてもどこでそのタイムアウト値を設定できるのか。
もっと速いPCで試すしかなさそうなんだけど、会社のPCは今使ってる自宅PCよりも遅いし、てことはタイムアウト設定の変更方法を探すしかなさそう?
まいった。。。
自分はもともとデータ分析・加工で飯を食ってたから、「このデータをどう料理してやろうか」って部分は得意というか問題ないんだけど、初めて触れる新しい技術での仕事って、こんな予想外/本質外の作業が多くて時間食っちゃうんだよね。
自分にとって新しい技術と言うことでトラブルも楽しみながら進めたいところだけど、「納期」という2文字が。。。w
**** (翌日追記)
結局、タイムアウト変更の方向ではなくコードオプティマイジングの方向で対処。
出社後、同僚から exsl:node_set() なる関数(XSLT1.0の標準関数ではない)の存在を教えてもらい、それを利用して素の検索回数を減らすことで劇的にパフォーマンスが改善。約1/5の時間で完了するようになった。
それでも1分弱はかかるけど、処理内容を考えるとまぁ許容範囲ってとこかな。
よかったよかった^^
O'Reilly XML.com - Understanding the node-set() Function
EXSLT