misc.log

日常茶飯事とお仕事と

業務日誌.NET

FormでAcceptButtonを設定しているけれどMultiLineテキストボックスでEnterも使いたい

FormでEnterキーを押すと特定のボタンを押したことにする「AcceptButton」というプロパティが設定されていると、MultiLineの設定を行ったテキストボックスで、Enterキーによる改行入力ができなくなります(Shift+EnterやCtrl+Enterなら可能ですが)。これを…

IDisposableの実装に関する説明

DBアクセス処理を行うクラスの仕上げ作業を行っている中で、切断処理をおこなわせるためにIDisposableを実装しようと考えました。毎回、これのやりかたについては調べ、毎回「なるほど!」って思いながら作業するのですが、MDSNの記事で非常にわかりやすく説…

Releaseビルドするとエラーになるが、Debugビルドでは動く

あるライブラリを用いたソースで、Releaseビルドではエラーになってしまうというプログラムがあり調査していました。ライブラリ製造元から出してくれているサンプルでは同様の処理を問題なくこなしているのに、プロジェクトメンバーが作ったソースはだめ。何…

プリンタ出力で「アクセスする設定が有効ではありません。」

FAX出力する処理を持ったプログラムの改修作業を行っており、その過程でプリンタ出力処理を新しく書き直すことに。FAX出力ドライバはプリンタドライバの形式をとっており、プログラムからはプリンタに出力するかのようにプリンタ名を指定すればOK……だったの…

GetFileNameメソッドってスラッシュも区切りとして認識するんだ……

.NET Framework 2.0でのお話。知らなかったのですが、System.IO.Path.GetFileNameメソッドって、パス文字列のフォルダ区切りにスラッシュ("/")が使われていても、さらに、円記号と混在していても区切りとして認識してくれるんですね。以下の例だと「testfi…

値型とNothingの比較(VB.NET)

VB.NETでは、通常は参照型の空参照として扱われるNothingとの比較は「Is Nothing」や「IsNot Nothing」で行う*1。しかし、対象が値型変数の場合、通常のイコールやノットイコール(=や<>)で比較が出来る。これ、案外知らない人が多い。ではこのときに何が起…

SafeFileNameプロパティと.NET Framework 2.0とサービスパックと

さっきしったこと…….NET Framework 2.0(無印、サービスパック無し)には、System.Windows.Forms.OpenFileDialogオブジェクトのSafeFileNameプロパティが無い。これ、豆知識な。SP1を適用すると登場するようです。Microsoft Visual Studio Professional 2012…

ODP.NETのバージョンでトラブル

以前、アセンブリバージョンリダイレクトについて書きました。これを使った環境で、なんかエラーが(笑)。 やりたかったことは ODP.NET 2.102.5.0で作成したプログラムを、ODP.NET 2.102.4.0だけが入った環境で動かしたい ということでした。通常、古いバー…

デバッグビルドとリリースビルドでエラー発生有無が変わる

スキャナを利用したアプリケーションで、Visual Studio 2005によるビルドの際にDebugモードでビルドするかReleaseモードでビルドするかによってエラー発生するかどうかが変わるパターンに遭遇してしまい、困っています。具体的には、デバッグビルドであれば…

ODP.NETとアセンブリバージョンリダイレクト

新バージョンのODP.NETを参照してビルドしたものを、旧バージョンのODP.NETが入った環境で稼働させる必要が出てきました。方法について調べていたところ、同僚からこのサイトを紹介されました。 バージョンリダイレクト/株式会社ミークス http://www.meeks.j…

Visual Studio 2005をWindows 7にインストールしようとしてみた

仕事で、Windows 7上でVisual Studio 2005を利用する必要があったのでインストールしてみたらこんなことに。ダイアログに表示されたボタンから「オンラインで解決策の有無を確認する」を選択すると表示されるWebサイトがこれ。どうやらWindow7でVisual Studi…

DataSourceにListを設定したコンボボックスでSelectedIndexを強制指定する

DataSourceにListを継承したオブジェクトを、DisplayMemberやValueMember指定と共に設定したComboBoxで、初期表示項目を設定しようとSelectedIndexを指定したのですが、エラーが発生しました。エラーはOutOfRange的なもの。この状況と同じでした。 ComboBox …

MustInherits宣言されたクラスのテストコード

Visual Studio 2010の自動テスト機能(いわゆるNUnit)では、クラスにPraivate宣言されたメソッドやプロパティもテストしてしまえる機能がついています。ですが、MustInherits宣言された、いわゆる「継承しないと使えない」クラスもできるのでしょうか?ってこ…

64bit環境へのODP.NETインストールとアプリの配布

お仕事で64bit環境と32bit環境が混在する環境への配布を行う必要があるのですが、その辺りについての「どうすべきか」がよく分からないので調べています。 64bit環境にODP.NET 64bit版をインストールしてみる 64bit環境であるWindows Server 2008 R2に、ODP.…

Windows Server 2008 R2でGACに登録されているアセンブリの一覧を見る

WindowsXPとかと雰囲気が全然違ってて場所が判りませんでした。ここを見て判明。 How to Locate Assembly in GAC http://artykul8.com/2009/08/locating-assembly-in-gac/ 場所は、C:\Windows\assembly フォルダです。

VisualBasic名前空間のIsNothing()と、.NETのIs Nothing速度比較

結果は明白。タダの条件式の演算子として使えるIs Nothingの圧勝。速度差は何度か試してもやはり2,000倍ほど速い。 まずは.NETのIs Nothing、こちら、0.2マイクロセカンド。次にVisualBasic名前空間にある、VB6.0の頃からあったIsNothing関数、こちら、だい…

VisualBasic名前空間のLen()関数と、.NETのString.Length速度比較

これまた大きな差が出ました。結論から言うとString.Lengthの方が8万倍ほど速いです。 まずは.NETのString.Lengthメソッドによる文字長取得。 次はVisualBasic名前空間のLen()関数。 ミリセカンドレベルの速度差なので、これだけを人間が体感して感じること…

空白を生成するのにSpaceを使うか直接指定するか。

結論から言いますと、数文字程度なら直接ダブルクォートで囲って定義したほうが30万倍速いです(笑) こちら、直接定義。文字列の代入は1μセカンド未満の速度。 一方で、VisualBasic名前空間の昔からあるSpace関数は…… はわわーww

空文字比較と文字長ゼロ比較の速度差

取得した文字列がカラッポであるかどうかの判定なんてのは業務処理でありがちな判断文ですが、これもちょっとしたコツで速度差が大きくでます。まず、最初に「トリムした文字列が空文字(String.Empty)でないことの判定」を見てみましょう。 約9,000μセカンド…

VisualBasic名前空間のLeft、Midと、String.Substringメソッドの速度差

やっぱり未だに平気でLeftとかMid使う人がいるので、速度差の実証を。http://d.hatena.ne.jp/frontline/20120427/p1 の続きです。 まずは.NETのStringクラスが持つSubstringメソッドの速度。こちらは88μセカンド。 次いで、VisualBasic.String.Left関数。こ…

文字列→Int64への変換最速は?

http://d.hatena.ne.jp/frontline/20120427/p1 の続き。文字列のトリムに関しては大敗したVisualBasic名前空間の処理ですが、では、Long変換はどうでしょうか?

文字列トリム処理の速度比較

お仕事で調べることがあったので記録を残しておきます。VB 2010でのトリム処理は、未だにVisualBasic名前空間のTrim関数も利用可能ですが、果たして.NETのString.Trimメソッドとどっちが速いのでしょうか?という問題。手元にある速度測定ツールがVisual Stu…

ドキュメントコメントの「code」タグを使うとタイトルが「C#」になる

Visual Studio 2010などにある、定型書式のコメントからヘルプを作る機能で、サンプルコードを埋め込むタグ「code」を使うと、なぜかサンプルコード部分のタイトルが「C#」になってしまうという問題がずっと出ていました(下図参照)。まぁサンプル自体は読…

DateTime型引数にNothingを渡すと…

単体テストコードを書いていて、引数にDateTime型の年月日時刻情報を指定する関数があったので、そこにNothingを指定すると何が起きるのかを見てみました……。関数の中では、受け取ったDateTime型データをToStringで「〜.ToString("yyyyMMdd")」のように書式…

64bit環境でのODP.NET 64bit版、32bit版の共存

Oracle 11gから導入されたInstant Clientを使えばいけそうだけど、でもやっぱ共存となると要確認かな……というオチでした。Instant Clientも「よくわからないものは使うな」でNG出されそうなので、残念ながら環境を別々に作って考え事を減らす路線でいきます…

.NETの自作ライブラリで出させる例外

.NETでライブラリを作っていて、例外を投げよう!と思っても一体何例外にすればいいかわかんなかったりしますよね。で、その辺をざざっとまとめられているページを見つけたのでメモっておきます。 スローする例外チートシート/主に技術日記 http://yfakariya…

開発するアプリのコンパイルターゲットCPUをどう設定すべきかねぇ…

お仕事で迷うことがあったので、しらべて通知したお話を可能な範囲で転記しておきましょう。 開発チーム向け回答抜粋 実装〜結合テスト工程では以下の設定とします 32bitクライアント用アプリケーション: x86 64bitサーバー用アプリケーション、共通DLL : An…

プログラムにおける制御構造やエラー処理の「まとめ方」

内部向け説明資料をここで推敲しますwww -------------- 論点を分けましょう。多分ごちゃごちゃになってます Try/Catchによる構造の構成方法について VB6.0以前のOn Error Gotoと異なり、.NETでのTry/Catchはあくまで「例外的状況を制御できる制御構造」です…

Visual StudioのターゲットCPU設定をどうすべきか

これまで正直なところ全然気にしたことがなかったのですが、今回の案件、サーバーが64ビットなので、ちょいと考えないといけない。 AnyCPU Exes are usually more trouble than they're worth http://blogs.msdn.com/b/rmbyers/archive/2009/06/8/anycpu-exe…

.NETの和暦取り扱い範囲

業務アプリを作っていると、和暦西暦混在でいろいろ変換したりする必要がありますが、以外に「明治1年1月1日とかってOKなの?」といった端っこチェックがどう動くかとか、暗記してないんですよね。というわけで……。 JapaneseCalendar クラス(.NET Framework …