備忘録

DataTableのカラム順番変更

DataGridViewにバインドしているDataTableのカラム順番を変更したくて右クリック、
ドラッグ&ドロップをしようとしたが出来なかった。
仕方がないのでDataSetのXSDファイルエディタで直接開いてComplexTypeのsequenceに出てくる順番を手で直した。

そしたら大惨事。DataGridViewのDataPropertyName、HeaderTextなどがことごとくリセットされてしまった。
バックアップを取っていなかったので、手で再設定。

後で調べたら、データテーブルの編集画面でカラムを選択して、Cut&Pasteすると移動できるらしい。
DataGridViewでない他のGRID製品も同じようにリセットされるのがあった。
リセットするならしますって言ってからやってほしい。

プロファイラ

MSDNにある How To 情報: CLR プロファイラの使用方法 でプロファイリングしようとしたがうまくいかなかった。
「Wating for application to start common language runtime」と出たままプロファイルが開始せず、アプリを終わらせると次のメッセージが出てダメ。

System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
場所 CLRProfiler.Form1.checkProcessTimer_Tick(Object sender, EventArgs e)
場所 System.Windows.Forms.Timer.OnTick(EventArgs e)
場所 System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


ソースが付いているので調べることも可能だと思われるが、そこまでの気力は無し。

GPL で公開している nprof を使ってみた。
最新版が2009年にでた 0.11 で大丈夫か?と思ったがちゃんと動いた。

かわがらす ver0.8.0.0で試してみたら、

Application.DoEvents();


に約6割の時間を費やしていた。
マルチスレッドで動かしていて、別スレッドの処理の終わりをメインスレッドでループして監視していたがその際、ステータスバーを更新するのに DoEvent を呼び出していた。
スリープを入れるようにして大分改善。次期バージョンではCPU使用率が減って速くなるかな

ドメイン名

System.Net.Dns を使えば名前を引くことは出る。

しかし、引いたドメイン名からはIPアドレスぐらいしかアクセスできない。
サブドメインを取得したり、取得したもののトップレベルドメイン(TLD)・セカンドレベルドメイン(SLD)をとったり、取得したものがTLD/SLDであるかの判定もできない。

たとえば、yahoo.jp, yahoo.co.jp, www.yahooo.co.jp とある時に、1つ目は汎用ドメインだし、3つ目はサブドメインだしそこらへんを知りたいが知るすべがない。
CodePlex とかにライブラリがあるか探してみたが無さそう。
需要がないのだろうか?

Yahoo! に自動ログイン

Yahoo のログインページ を取得して、hidden の情報を引き継いで action のURLにPOSTしたが CAPTCHA の画面が出てきてあえなく失敗。
WebBrowserコントロールを使って、Javascriptをたたいてログインしている人達はいる。
Javascriptのエンジンが無いとダメか。。。

WebBrowserコントロールじゃあマルチスレッドでは使い物にならないからあきらめて、
別口でログインした時の persistent cookie を取っておいてログインするしかないかな~

FC2Ad