C#

ADO.NET Oracle用データプロバイダの性能傾向の違い

同日の訂正記事でも書いたが、元々処理の経過時間を計測するコードを用意したのはOracleに接続可能な複数のADO.NETデータプロバイダの性能の傾向を調べるのが目的だった。.NET2.0環境においてADO.NETを用いてOracleデータベースに接続するためには以下のデー…

System.DateTime.Ticksの精度と高精度タイマ

前にも書いたが、.NET C#における処理の経過時間を測るコードの書き方としてはDateTimeクラスを使った long start = System.DataTime.Now.Ticks; 〜処理〜 long elapsedTime = System.DataTime.Now.Ticks - start; 又は、.NET2.0で追加されたStopwatchクラス…

データアクセスレイヤの設計

先日の日記では拙作のフレームワークにおけるデータアクセスレイヤを検討した。いつまでも妄想する訳にもいかないので大体の方針を決めることにする。 ピア層 ADO.NETをそのまま使う。データプロバイダに関してはOracleを使うのでODP.NETを使うという話が出…

Very Lightweight Data Access Layer

Very Lightweight Data Access Layer in C# and .NET 2.0 - The CodeProjectCodeProjectの新着記事より。業務では管理状態にあるSQLだけを使用するので機能豊富なO/Rマッピングなデータレイヤは必要無いというシステム(今の自分の仕事もそうだ)の場合、この…

PostSharp

久しぶりにAOPネタ。PostSharp - postsharp.orgakirameiさんの所で紹介されていた、.NETの主に(※)AOPのためのフレームワーク。 はじめてのPostSharp - 匣の向こう側 - あまりに.NETな以前ここでも書いたが、.NETにおけるAOPの実装の方法は .NETプラットホー…

Windows Vista時代の防衛的なWindows Formsプログラミング

大げさな標題になってしまった。ようは今まで、そしてこれからも暫くは作り続けていくであろうWindows Formsアプリケーションを、今後Windows Vistaが普及して行く中でどうしていこうかということだ。 Windows Vista以降のGUIプログラミングの主流はWPF(Wind…

Desktop Window Manager(DWM) on WindowsForms

先日はDWMによるGlassの透過をWindows FormsとP/Invokeで制御するデモを紹介したが、今日は同様にWindows Forms + Desktop Window Manager(DWM)でウインドウのサムネイルを制御するデモを見つけたので紹介しよう。(といってもBart De Smet氏がデモを紹介した…

システムで一意なID文字列を生成する

以前のエントリで任意の文字列に対応するID値を生成する方法について言及したが、今度はシステムで一意な文字列を取得する必要が出てきた。最初は軽く考えて以下のように書いた。System.DateTime#Ticksは100ナノ秒単位で値を取れるので、あまりヘビーでは無…

プロキシサーバの認証が必要な環境でClickOnceでの配布が失敗する

元ネタはakirameiさんの日記より ClickOnceで嵌る - 匣の向こう側 - あまりに.NETな私は幸運にも?プロキシサーバを介する環境に無いためか、この問題は発生していない。 なお、同様の問題が過去にMSDN Forumでも話題になっている。ClickOnce Proxy Server Au…

HttpWebRequest#AllowWriteStreamBufferingプロパティとHTTPヘッダ

このプロパティ、ドキュメントには書いていないが、エンドポイントから送信するデータをメモリ上にバッファリングするか否かを指定することで、同クラスのSendChunkedプロパティ又はContentLengthプロパティと連動するので注意が必要だ。というのも、消費メ…

プロセスアフィニティマスクをアプリケーションで設定する

前回のエントリではimagecfgというユーティティを使用してプロセスアフィニティを設定したが、この方法ではバイナリのイメージヘッダを直接書き換えてしまうため変更は恒久的なものになってしまう。 動的に変更することはできないのだろうかと調べるとWin32…

プロセスアフィニティマスクをProcessクラスのプロパティで設定する

この"プロセスアフィニティマスク"だが、Processクラスのプロパティとしてちゃんと用意されていることが判明した。Process.ProcessorAffinity プロパティ先ほどのイベントハンドラは、以下のように書き換えることができる。P/Invokeの記述も一切不要だ。 pri…

DataGridView#CellEnterイベントに注意

名前通り、WindowsFormsにおけるDataGridViewクラスでセルがフォーカスを取得した時に発生するイベントだが、直感的では無いイベントの発火条件があるので注意が必要だ。このイベントが発生する事象としては マウスで該当のセルをクリックする キーボードで…

GenericsでNodeListを作る

.NET C#2.0(別にJavaでもいいんだが)で、オブジェクトを集約するリスト(DOMのノードリストのようなクラス)を書く場合は、まず1.対象のオブジェクトの型(クラス又はインタフェース)を作り public class FooItem : IFoo {} 2.作った型を集約して操作する型を作…

EditingControlShowing

WindowsFormsのDataGridViewでセルの編集を行うためにインプレイスなエディタコントロールを開く操作を行うと(デフォルトではF2押下やマウスで選択したセルをダブルクリック)、このイベントが発生する。このイベントは.NET2.0で新たに追加されたイベントだが…

Control#SelectNextControlメソッドとデータバインド

WindowsFormsで双方向のデータバインドを行っている場合、バインドしたコントロールのプロパティ値と対応するデータソースオブジェクト(DTO)のプロパティは互いを更新しあうようになる。 例えばテキストボックスのTextプロパティと、PersonDTOという単純なク…

名前空間エイリアス修飾子演算子(::演算子)

ASP.NETのWebFormデザイナが生成したソースコードを見てみると、そこには見慣れない(というか、WindowsFormsのコードビハインドでは見たことが無い)修飾子によりSystem.Web.UI名前空間のコンポーネントが定義されていた。 protected global::System.Web.UI.H…

初めて触る?ASP.NET

今の仕事を始めた時に、.NET自体初めてだったこと、仕事の対象がWindowsFormsだったことを鑑みて、余計な情報を遮断するために敢えて故意にASP.NETは無視したのだが(学習範囲が広大な場合によく使う手だ)、いい加減もういいだろうと思い、Visual Studio上でA…

ReSharper 2.5

基本的に改善されている点が多いのだが、ウインドウのドッキングが再現されないで、VS2005の起動の度にドッキングし直さなければならなくなっているのが困ったちゃん。あと、UnitRunnerが非デバッグモードでも標準出力を表示するようになったのは凄く有り難…

Shorter Instance creation

エントリ「型の初期化と推論」でC#におけるジェネリクスのコンストラクタに関しての注文を書いたが、Javaでは次のバージョンで組み込まれるらしい。 Language Proposals (Shorter Instance creation : Page28) - What's coming in Java SE 7 / Danny Coward/…

ReSharper 2.5 for VS2005

うおっと更新されてたか。 http://www.jetbrains.com/resharper/download/結構変わっているね。 http://www.jetbrains.com/resharper/features/newfeatures.htmlネタ元は菊池さんのBlogより。 ReSharper 2.5 for VS2005追記: インストールしてみたが、アップ…

やりすぎ

下のエントリで言及したReSharper2.5だが、インスタンス、フィールド、プロパティへのアクセスの有無によって「このメソッドはスタティックにできるけど、どうする?」と聞いてくるようになった。設定で出ないようにすることも出来るし一度無効にしてしまえば…

RegisterHotKeyとObject.GetHashCode (その3)

RegisterHotKeyの第二パラメタのIDに何を使うか。やっと、このテーマにも結論が出そうだ。 どうやらオーバライドされる事に気をつけさえすれば、GetHashCodeを一意のIDとして使って良いのではないだろうか。 と思って、一度書いたクラスを書き直そうと思った…

RegisterHotKeyとObject.GetHashCode (その2)

前回のエントリではまだもやっとしたままだった 一意性は保障されないと書いてある。 まあ、通常はおとなしくアトムを使えば良いのだが、コードの記者がObject.GetHashCodeを使った意図が気になる。コードの出来からして、単なる手抜きとは思えないのだ。 そ…

RegisterHotKeyとObject.GetHashCode

[DllImport("user32.dll")] static extern bool RegisterHotKey(IntPtr hWnd,int id,int fsModifiers,int vlc); これはウインドウハンドル毎にホットキーをシステムに登録するための、Win32APIのC#におけるP/Invoke記述だ。 これを使ってアプリケーションに…

型の初期化と推論

MSDN Forumのスレッドより 記述の簡素化に対する要望私も、例えば、こんなのは /* なげーーよ、ながすぎるだよ */ LinkedList> matrix = new LinkedList>(); 以下のように、単純にnewで良いはずだよな、というのは前々から思っていた。 LinkedList> matrix =…

プロパティの型コンバータを用意する(層間型変換オブジェクト その4)

前回までは、二つの名前の同じプロパティを変換する際には、型コンバータが必要と書いた。今回は、型コンバータの中でも面倒だと思われる、コレクションを相互変換するコンバータの実装を考えてみる。コレクションを相互に変換する際に、考えたパターンは以…

不可逆な型変換とインタフェース(層間型変換オブジェクト その3)

エントリ、層間型変換オブジェクト その1において、菊池さんからコメントを頂いた時の、私の返し。 >双方向変換の強制は自分はしないかなぁ…とか思ってみました。 おっしゃるとおりです。確かに双方向は無駄かもしれない、という感じはあったんですが、単方…

プロパティの型コンバータを用意する(層間型変換オブジェクト その2)

昨日のネタの続きDataExchangeクラスを実装する方法がほぼ固まったので実装に入る。実装で肝になるのは以前にも書いたとおり、変換するオブジェクトのプロパティを変換する部分だ。変換する対象をどこまで広げようか考えたが、当面は リフレクションメソッド…

有り得ない?代入

驚愕の事実の続き。もっと具体的なサンプルで試してみた。 static void Main(string args) { string array = new string[] {"foo", "bar"}; IList list = new List(); System.Console.WriteLine(" list Type : " + list.GetType().ToString()); list = array…