9/10(金) TechEd 4日目
■ T2-367 SQL Server 2005 : SQLCLR - .NET Framework ベースのデータベースプログラミング -
スピーカーはマイクロソフトの梅津さん。Room B。
うーん、やっぱり面白いです、SQLCLR。
テーブル値ファンクションを SQLCLR で作るといろんなことに使えそうですよねぇ(具体的になにに使えるかはすぐには思いつかないですが(^^; )。
SQLCLR と直接関係あるわけじゃありませんが、パフォーマンスログを取っておけば、プロファイラでプロファイルといっしょに表示されるそうです。どこで負荷が高くなっているのかなんかを追いかけるときに便利ですね。
SQLCLR でもユーザ定義関数の場合はデータアクセスは読み込みのみ可だそうです(T-SQL も同じだっけかな)。ただ、その際は DataAccessAttribute で明示してあげる必要があるそうです。
[SqlProcedure] の場合、引数を ref にすると T-SQL の output になるそうです。また、戻り値がデフォルトで void ですが SqlInt32 に変えることはできるそうです。
System.Web.Mail は SQLCLR からは使えないけど、Web Service は普通に呼べるという話がありました。どちらも TCP を使った通信という意味では似たようだと思うんですけど、なんでこういう違いがあるんでしょう?こういったセキュリティ回りのことは要調査でしょうね。
最後のほうで、「データアクセスには T-SQL を使うべき」 「ビジネスロジックは論理的にわけるべき(すべてを SQLCLR で済ましたりしない)」 という話がありました。
やっぱりそうですよねぇ。
T-SQL ではなく SQLCLR を使うべきところとしては、
- テーブル値関数はぜひ使う(T-SQL に比べて 3倍くらいのパフォーマンスが出ることも)
- 集計関数もサーバカーソル、クライアントカーソルより高速になる可能性が高い。
- スカラー値関数、ユーザ定義型も SQLCLR のほうがいい場合が多い。
ということでした。
■ T5-418 Web Service Enhancements 2.0 を利用したメッセージングアプリケーションの構築
スピーカーはアマゾンジャパンの吉松さん(MVP でもある)。Room B。
とてもおもしろいセッションでした。実はアンケートの 「一番よかったセッション」 で私はこのセッションを上げました。
そうかぁ、Web サービスは RPC over Web ではなかったんですねぇ。
目から鱗という感じでした。
# けど、便利で楽チンだからという理由で WebMethod を使っちゃダメですか?
# あれ?けど、.NET Remoting over HTTP にすれば済んじゃう場合がほとんどで、
# WebMethod を使ったほうがいい場合なんてほとんどないかも。
■ Peer Talk Lunch
スピーカーの方やエバンジェリストの方などと話をしながら食事(立食)ができるランチです。
私も何人かの方とお話させていただきました。
# しかし、こういう場になると必ず文字コード認識とタイムゾーン、
# MSHTML の話をしているような気がする>某その筋の方(^^
■ T5-409 上級者のための ASP.NET プログラミング
スピーカーは NEC の山崎さん(MVP でもある)。Room A。
正直言って、このセッションはちょっと残念なセッションでした。
いや、別に内容自体がどうこうというわけじゃないんですよ。ただ、このセッションの内容が上級者向けとはとても思えないというか。この内容で喜ぶのは初心者レベルの人で、中級者くらいの人にはちょっとした復習くらいじゃないのかなぁ。
それと、途中で出てきた設定ファイルの読み込みについては、IConfigurationSectionHandler だけじゃなく XmlSerializer と組み合わせて使ったほうがいいんじゃないかと思うんですが。
■ T2-368 SQL Server 2005 : XML テクノロジー
スピーカーはマイクロソフトの高橋さん。Room B。
いやー、やっぱり SQL Server 2005 の XML はおもしろいなぁ。
SQL Server 2005 では XML データ型が増えてるわけですが、XML データ型は Uniqe 制約、キー制約はつけることはできないそうです(そりゃそうだ)。
XML データ型は 「実際には XML インスタンスを格納する」 とのことでした。んで、ここで疑問。
格納されている XML インスタンスって具体的には何なんでしょう?まさか XML を文字列で保存してるってわけじゃないんですよね?ひょっとして CLR の XmlDocument をシリアライズしたものなんでしょうか?それとも独自の DOM だったりするんでしょうか?
それから XML データ型のサイズは 2G までってことだったんですが、何が 2G までなんでしょう?XML を文字列で表現したときの上限が 2G なんでしょうか?(その場合、utf-8 か utf-16 かでずいぶん違うな) それとも DOM をシリアライズした結果が 2G なんでしょうか?(でも、それじゃ入れてみないことにはどれくらいのサイズになるのかわかんないな)
うーむ。
XML Schema を指定したほうがあらかじめ解釈の準備ができるため速いというようなことも言っていたような。これもちょっと気になるところですね。
ただ、スキーマの取り扱いにはちょっと面倒なところもありますね。慣れが必要そう。
そういえば、XML データ型内のノードなどに対してインデックスを作れるそうです(XML インデックス)。ただ、プライマリ XML インデックスが必要で、これはルートノードなどに作るそうです。するとセカンダリ(というかプライマリ以外)のインデックスが作れるようになり、これはタグ、値、パスに対して作成できるそうです。
ちょっとタグとパスがどう違うのかとか属性は?とかよくわかんないところもありますが、なんにしろ 「いろいろとインデックスが作れる」 ということのようです。
そういや、SQL の select にあたるのが XQuery で、select 以外のところは XML-DML と言うそうです。ほんとは XQuery に更新系も含まれてくれるといいんですけどね。
■ T5-407 Windows フォームにおけるパフォーマンス向上の実現
スピーカーはマイクロソフトの平井さん。Room B。
基本的なことだと思えるような部分もありましたけど、なかなかおもしろいセッションでした。
言われてみればそりゃそうなんですが、
- DrawImage は Width と Height を指定しないと画面 DPI にあわせてスケーリングされてしまう。
- 水平・垂直なら DrawLine より FillRectangle のほうが速い(ペンよりブラシのほうが速い。ペンは端の処理などがあるため)。
- グラフィックのときは SmoothingMode。アンチエイリアスがなければ当然速い。
- テキストのときは TextRenderingMode。アンチエイリアスがなければ当然速い。
なんてのは忘れがちなところですね。
マルチスレッディングのところで Form.Invoke を指して 「ここは必ず Invoke です。ここを BeginInvoke にすると、また、別のスレッドにいっちゃいますからうまく動きません」 みたいなことを言ってましたがそんなことないですね。Form.BeginInvoke は別のスレッドになんていきません。非同期 delegate の Invoke、BeginInvoke と Form(Control)の Invoke、BeginInvoke とでごっちゃになっちゃってたものと思われます。
Windows.Forms の場合 ngen も効果があるかも、というのは 「へぇ~」 でした。
あと、最後のほうでさらっと 「Class よりも Structure」 みたいなのがあったんですが、これはちょっと危ないですね。ArrayList に出し入れしたい場合などは Structure だと Boxing が発生するためかえって遅くなる可能性があると思います。もちろん、そうじゃないときはヒープを確保する必要がないので Structure のほうが速いはずなんですが。
■ (やっぱり) 飲み会
MVP な方、コミュニティな方、マイクロソフトな方など(27人くらい)でお疲れさま会。
その後、11名ほどで二次会。
># しかし、こういう場になると必ず文字コード認識とタイムゾーン、
返信削除># MSHTML の話をしているような気がする>某その筋の方(^^
他に困ってること無いんだもん。