イントレ
  • 新規
  • ペイント
  • 一覧
  • 管理
  • Home
  • ダウンロード
  • 日記
  • イラスト
  • リンク
  • About
  •  RSS

本文へジャンプ


イントレ。

2010-03

2010-03-25

フィールドとプロパティの読書速度実験。

[日記] C# / .NET >> 2010/03/25 (木) | 04:14:36 | 魅椥 愁
どっちが早いのか気になったので、ちょっとテストしてみた。
フィールドとプロパティの通常・リフレクション経由の読み書きを100万回行って時間計測。

read-field(normal): 27.3012ms
read-property(normal): 58.4602ms
read-field(reflection): 395.7991ms
write-property(normal): 397.8156ms
write-field(normal): 398.9727ms
write-field(reflection): 1005.3316ms
read-property(reflection): 2019.6969ms
write-property(reflection): 3130.8138ms

やっぱりフィールドへの読み書きは早いですね。
そして、プロパティへのリフレクション経由読み書きは絶望的なほど遅いですね・・・。


ついでにLambdaExpressionのメンバー名取得も計測。
INotifyPropertyChangedのいけてる実装とかでつかってるやつ。

GetName(() => PROPERTY); // == "PROPERTY"
みたいな感じで、ラムダ式で指定したプロパティ名を取得するってコードになります。
VSのリファクタ機能とか使えるので名前変更とか使ってる場所特定とか、文字リテラルを使うよりメリットは多いです。

が。10万回のテストで2019msとハンパなく遅いです。(文字リテラル指定だと2ms程度)
リフレクション絡む部分はコストが高いってことで、使い方をちゃんと考えなければいけないなぁ。

2010-03-22

WPFでWinFormsのContextMenuを実行する件。

[日記] C# / WPF / .NET >> 2010/03/22 (月) | 07:28:33 | 魅椥 愁
WPFのコンテキストメニューの見た目がなんか嫌。なの。
     ↓
WinFormsの使えばいいじゃん?
     ↓
WinForms.ContexuMenu.Show()がWinForms.Control要求する。なの。
     ↓
WinForms.ContextMenuStrip使えばいいじゃん?
     ↓
独自な外見は嫌。なの。
     ↓
じゃ、WinForms.ContextMenuのハンドルもらってAPIで表示すればいいじゃん?
     ↓
TrackPopupMenuExで実行してもクリックイベント発行されない。なの。


という経緯で、調査したらリフレクションでコマンドディスパッチャを呼び出せばOKっぽい。

具体的には、System.Windows.Forms.Command.DispatchID()メソッドを呼び出す。
Commandクラスはinternalで、DispatchIDメソッドはstatic。
DispatchIDはコマンドIDを引数にとるので、
TrackPopupMenuEx()にTPM_RETURNCMD(0x100)を指定して、コマンドIDを返すようにしてもらう。

var menu = new WinForms.ContextMenu(...);
var id = TrackPopupMenuEx(menu.Handle, 0x100, x, y, hWnd, IntPtr.Zero);
if (id != 0)
{
  var asm = typeof(WinForms.ICommandExecutor).Assembly;
  var type = asm.GetType("System.Windows.Forms.Command");
  var method = type.GetMethod("DispatchID");
  method.Invoke(null, new object[]{ id });
}

これでMenuItem.Clickイベントが発動するようになった。
とはいえinternalクラスを使ってる以上、WinFormsの中身の構成が変わったら使うものにならなくなるわけだが。

2010-03-15

今夜はMIX10。

[日記]  >> 2010/03/15 (月) | 19:39:53 | 魅椥 愁
http://live.visitmix.com/

たぶん深夜1時30分か2時30分。
公式サイト行ってストリーミング始まってたら喰い付かなきゃですね。

Silverlight4のRTWもありそうですが、それよりもIE9&HTML5が気になりますね。
PDC09でお披露目されてから数ヶ月ですが、早くもIE9ベータ版がくるかもとか噂がありました。
流石にちょっと早すぎる気がしますが、最近のMSのWebに対する本気っぷりは凄いからなぁ・・・。

そういえば、ちょっと前にWindows Live Wave4のスクリーンショットリークもありましたね。
あぁ、Windows Phone 7 Seriesってのもありましたね・・・。
それとXNA4に関する情報もあるかも。

なんだかんだでお楽しみ情報がいっぱいあるなぁ。
今夜が楽しみ。・・・時間間違えてなければ。

あ、自分はAzureは完全スルーですが何か?

2010-03-11

PCが超不安定。

[日記]  >> 2010/03/11 (木) | 22:23:01 | 魅椥 愁
気づくとPCが落ちてます。
決まって、部屋の暖房を落として数十分放置するとフリーズしてます。
前々から寒くなるとPCの様子が怪しくなっていたんですがね・・・。

いつもハードディスクの読み込みトラブルで起動しなくなるので
一見ハードディスクが原因のようにも見えますが・・・これは電源ですね?
案の定、室温が下がった状態では電源の出力がすごく不安定になってました。

ということで電源交換決定。。。
またガラクタが増えるorz

2010-03-10

結膜炎!!

[日記]  >> 2010/03/10 (水) | 22:33:37 | TGN
久しぶりの更新・・・。

是非伝えておきたいことがありまして・・・。



昨日の朝方のことなのですが、

目覚ましが鳴り、さぁ起きるかと思ったところ・・・


・・・!?

・・・・・・!?

あれれ!???

目が開かない!????


あれれ!???

もしかして・・・目やに!???




目やにで前が見えなぁぁぁい!!


なんだコレはと思いつつ・・・目やにをこすり鏡を見ると・・・

充血しまくってる目が!!(両目)


え!???

これって結膜炎!???

以前も結膜炎になったことはありますが、両目いっきになることってあるの!???



昨日は仕事だったので、充血しきった両目で行きましたが、

案の定ネタにされまくり!!



流行目だと困るので眼科に行けと指令が出て、眼科に行ったのですが、

予想通りの結膜炎でした・・・。


2種類の目薬をもらい付けているのですが、

1日たった今日も目は充血しきったまま・・・。


しまいには何が原因か分かりませんが、

顎に縦ラインの傷が付いていて、アンタッチャブル山崎のケツ顎状態に!!(なにげにこっちの方が早く直って欲しい)


最近の低気圧で鼻炎も悪化してきたし、

最近何かツイてないな・・・。



Jリーグも開幕したのでBIGを購入したけど、半分も当たってないし・・・。ちくしょう。<無関係

TortoiseHg 1.0

[日記]  >> 2010/03/10 (水) | 04:41:34 | 魅椥 愁
http://tortoisehg.bitbucket.org/

気づいたらリリースされてました。
UIが「退化」してるのはツールキットの仕様だそうで少しガッカリですが、0.9.3よりはずっと使いやすくなってます。

最近になってMQの機能を多用するようになり、Marcurialなしでは辛い状況になってきました。
少数の変更をまずパッチとしてまとめて、ある程度たまったらリビジョン化(コミット)してます。
いつでもパッチをあてる前に戻って修正できるので、コミット後にtypoや細かいミスに気づいてorzという状況を防げます。

MQを使う上で注意しないといけないのが、パッチをgit形式にすること。
標準ではバイナリファイルの比較が行えず、パッチあてたり外したりするとバイナリファイルがロストします。

あとは日本語ファイルを問題なく使えるようになれば言うこと無しなんだけどなぁ。
現状はwin32mbcs使ってるので、linuxでファイル名が化けてます。
こちらはMercurialに問題があるそうで、本家対応待ちなんだとか。

ま、linuxにリポジトリおいてもwindows側に引っ張ってきて使う分には問題がないのですが。
linuxでwin32mbcsって使えるんだろうか・・・?

今度実験してみよう。

2010-03-05

サマーウォーズ

[日記]  >> 2010/03/05 (金) | 17:55:59 | ハニー
サマーウォーズ鑑賞なハニーです。


CM見て気になってはいたのですが
結局見に行かず自宅鑑賞となりました。


見てから気気づいたけど監督が細田守だったんですね。
... 続きを読む

2010-03-01

.NET4→.NET3.5のコード互換性とか。

[日記]  >> 2010/03/01 (月) | 20:09:06 | 魅椥 愁
使い勝手いいのでVS2010ばかり使ってるんですが、
折角なので.NET3.5向けにWPFアプリを.NET4に変更したりしてました。

.NET3.5の時はSystem.Data.SQLite(ADO.NET)が原因でClientProfileは駄目だったんだけど、
.NET4 ClientProfileだと大丈夫ですね。

で、今度はそれを.NET3.5に戻したい場合の話。
いくらか手直しするだけで行けました。
具体的には・・・

・ソリューションファイル(.sln)を書き換え
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008

ソリューションファイルを書き換えた時点でVS2008で読めるようになるんですが、
ビルドするときツールバージョンがどうとか怒られるので修正。

・プロジェクトファイル(.csproj)を書き換え
-Project ToolsVersion="4.0"
+Project ToolsVersion="3.5"

あとは
・ターゲットフレームワークの修正
・参照アセンブリの修正
・ソースコード微修正
・App.configの修正

この程度で済みました。
.NET4のSystem.Threading.TasksやSystem.Lazy、IEnumerable.Run()なんかは
Reactive Extensions for .NETで賄えました。
C#4.0の機能は使っていたらどうしようもないですが。
C#3.0とC#4.0では型推論の精度が違うのか、明示的にキャストしないと通らないコードとかありました。

あと、App.configでRuntimeVersion=4を指定してたりするとデバッガが起動しません。
useLegacyV2RuntimeActivationPolicyの設定などをしている場合はそれを削除するなどの修正が必要です。

しかし、Rx Frameworkのおかげでずいぶん拍子抜けした格好です。
簡単なパッチで3.5と4.0を行き来出来ますね。

そして、WPF4のテキストレンダリングに目が慣れていると、WPF3のレンダリングに絶望出来ます・・・。

HTML creation time [0.17sec.]
"intre." by MinagiSyu, sense 1999.11.23.
Powered by Nucleus CMS v3.41

Utilities

タグ
SAPFx | 園芸 | .NET | サッカー | PCパーツ | SAP1x | Windows 7 | C# | ツクールもどき | WPF | ...すべてのタグ
カレンダー
<   2010-03   >
日月火水木金土
 123456
78910111213
14151617181920
21222324252627
28293031   
最近の更新
    2010-07-11
  • [日記] WebMatrixが本気過ぎる件。
  • 2010-06-23
  • [日記] Google Reader APIの認証がまた変わった?
  • [更新履歴] Google Reader Notifier 改 r3をリリース。
  • [ダウンロード] Google Reader Notifier 改
  • 2010-05-31
  • [日記] DynamicObjectを使ったINotifyPropertyChangedラッパー。
  • 2010-05-28
  • [日記] タブが非アクティブな時にページを書き換えるフィッシング攻撃。
  • 2010-05-24
  • [日記] Mercurialのsubrepo。
Adsense