※ この記事は以下の Office サポート フォーラムに移行しました。 https://social.msdn.microsoft.com/Forums/ja-JP/0d9c6273-bade-4f6a-a0de-5adb748d15eb/office-part2 こんにちは、Office 開発系サポート 森 健吾 (kenmori) です。 今回の投稿では、Office オートメーションの実装コードで割り当てたオブジェクトを解放する – Part1 の続編を記載いたします。続編では、前回の投稿でベスト プラクティスとして紹介した解放処理に対して解説を実施した後、正しくオブジェクト解放を実施しない場合に生じる影響についてご紹介します。 最初に、オブジェクト解放漏れがあると、主に以下のような事象があるということは先に述べておきます。 ・意図とは異なる COM オブジェクトに接続され、想定と
※ この記事は以下の Office サポート フォーラムに移行しました。 https://social.msdn.microsoft.com/Forums/ja-JP/5deec897-a897-404b-a610-f7d894fde1b3/office-part1?forum=officesupportteamja こんにちは、Office 開発系サポート 森 健吾 (kenmori) です。 今回の投稿では、Office オートメーションの実装コードで割り当てたオブジェクトを解放するというテーマにて記載いたします。 .NET Framework 上で動作するカスタム アプリケーションにおいて、Office オートメーションで処理を実装する場合には割り当てたオブジェクトを確実に解放することをお勧めします。 2016/12/2 Update サンプル コードを中間オブジェクトも解放するよう
Excelに限らずInterop操作を行う場合には決まり事があります。 COMオブジェクトの参照カウントをきっちり解放する。 これを行わないと、処理が正常に行われていても プロセスが残ったままになります。 COMの参照カウントを解放するには以下のクラスを利用します。 Marshal.ReleaseComObject(object) ReleaseComObjectメソッドに該当するCOMオブジェクトを渡すと そのオブジェクトの分の参照カウントが解放されます。(つまりカウントが減ります。) 最終的に、全COMオブジェクトにて参照カウント数が0になった後で Excelを終了すると、ちゃんとプロセスが消えてくれる事になります。 でも実際に処理を書いてみると、これがめっちゃ大変です。 参照カウントを減らす為には、利用したオブジェクト全部を保持しておかないと駄目だからです。 Dim xlBooks
はじめまして、kageと申します。 このブログではプログラミング、主に.NetやC#についての話題を取り上げようと思います。 C#で開発していて結構たいへんなのはExcelなどCOMのオブジェクトを扱うときです。 スペースがないので書きませんが旧来のVB6と違って非常に手間です。 しかし Visual Studio 2010 が出てそれが少し緩和されました。 これに関連する機能としてC#4.0では 1.dynamic型の導入 2.オプション引数の導入 です。 これら機能でかなりExcelなどのCOMオブジェクトを扱うのが楽になりましたがCOMオブジェクトの開放はまだプログラムで行わないといけません。 本当は.NET Framework では RCW(Runtime Callable Wrapper) がオブジェクトのファイナライザを呼び出すときにCOMオブジェクトの開放を
Visual Studio 2013 (VS) の "Performance and Diagnostics Hub" が超いいです。とうわけでこの記事は自分向けのリンク集です。 .NETアプリのメモリリーク調査には従来からWinDbgという方法がありましたが、WinDbgはとても手軽とは言えません。Performance and Diagnostics Hubなら、VSでデバッグ実行しながら好きな時にメモリ状態のスナップショットを取れます。スナップショットを取る前には好きな時にGCを実行できます。スナップショットには、メモリ使用量はもちろん、オブジェクト型毎のインスタンス数が記録されます。これらの値はスナップショット間での比較が可能なので、リークしている (≒インスタンス数が増え続ける) オブジェクトを特定できます。この記事の方がイメージが分かるスクリーンショットが多いですね。 なおVS
AutoMapperも既に.Net Coreへの対応が行われております。 ということで、ASP.NET CoreでAutoMapperを動かしてみたいと思います。 テスト環境 テスト環境はMacで、dotnet --info の結果は以下の通りです。 ryuichi:coreMvcAutoMapper daigo$ dotnet --info .NET Command Line Tools (1.0.0-preview2-1-003177) Product Information: Version: 1.0.0-preview2-1-003177 Commit SHA-1 hash: a2df9c2576 Runtime Environment: OS Name: Mac OS X OS Version: 10.12 OS Platform: Darwin RID: osx.10.12-x
本書の内容は、.NET に限らず Java や他の言語でも適用できそうだ。 ただ、内容を理解するにはドメイン駆動開発や GoF のデザインパターン、 Martin Fowler のエンタープライズアプリケーションアーキテクチャパターン等の知識が必要。 ドメイン駆動開発はまだやってないので、その部分はなんとなくの理解にとどまってしまった。 オンラインストアを題材に本書のアーキテクチャを実践したサンプルおかげで、 どういった設計をやればいいのかは理解できたので良しとしよう。 やっぱり論よりコードだな。 ASP.NET MVC で作っているアプリがスパゲッティになりつつあって、最初の設計のマズさに悩んでいた。 大規模なリファクタリングを考えていたんだけど、ドメインモデル、 とりわけアプリケーションサービスは良いヒントになった。 コマンドクエリ責務分離を適用して恩恵を受けられるほどの複雑度ではない
.NET Frameworkには「SOS デバッガー拡張」という機能があり、デバッガからCLRの状態を追いかけることができる。これを使うと、重いVisual Studioを使わなくても、WinDbgで.NET Frameworkのアプリケーションをデバッグすることができる。今回は、.NETアプリが異常終了したときにその状態を調べるという方法について。 この役に立たないダイアログも、価値のあるものになるはず。 設定編1. WinDbgをインストールする今回はWinDbgを使うことにするので、WinDbgをインストールする。WinDbgをインストールするには「Windows 用デバッグ ツールのダウンロードとインストール」にある通り、WDKあるいはWindows SDKをインストールすればついてくる。途中でコンポーネント選択の画面があるので、デバッガのみ選べば、他のコンポーネントをインストール
作ってもらったAP/DBサーバー(VS2008R2)に、 ASP.NET 4.5 のウェブアプリを 64bit で動かしたくてデプロイしてみたら、 ODP.NET のアセンブリがロードできなくて動かなかった。 調べたら GAC に 2.0 は登録されてるのに 4.0 は登録されてなかった。*1 手動登録 cd C:\app\Administrator\product\11.2.0\dbhome_1\ASP.NET\bin\4 oraprovcfg /action:gac /providerpath:C:\app\Administrator\product\11.2.0\dbhome_1\ASP.NET\bin\4\Oracle.Web.dll cd C:\app\Administrator\product\11.2.0\dbhome_1\ODP.NET\bin\4 oraprovcfg /
お仕事で64bit環境と32bit環境が混在する環境への配布を行う必要があるのですが、その辺りについての「どうすべきか」がよく分からないので調べています。 64bit環境にODP.NET 64bit版をインストールしてみる 64bit環境であるWindows Server 2008 R2に、ODP.NETの64ビット版(ファイル名: ODAC112030_x64.zip)をインストールした後の状態がこんな感じです。ちなみに、事前に.NET Framework 4.0はインストールしています(Windows Server 2008 R2が標準でもっている.NET Frameworkは3.5まで)。 確認したフォルダは、「C:\Windows\Microsoft.NET\assembly¥GAC_64\Oracle.DataAccess」フォルダ。GACは64bit用と32bit用が別々に用意
縄神様が困っておられたので私の拙い知識がちょっとでも役に立てばと思い久々にブログを書きます。 InstantClientの配布パッケージとかないもんかな— Ahf(Tomoyuki Obi) (@twit_ahf) 2014年10月22日 こちらのつぶやきではInstantClientをご所望されてますが、実際は.NETアプリのインストールパッケージを探しておられたのでこのエントリではODP.NETのインストール方法について記載します。 前提 このエントリの内容はOracle 11g(11.2)〜12c(12.1)あたりを対象にしています。 記載している手順の詳細についてはマニュアルで確認してください。 ODP.NET Managed Driverを使う 多分これが一番早いと思います。 ODP.NET Managed DriverはOracle 12cになって登場したフルマネージドのODP
サービスのプロパティに「回復」というタブがありまして,エラー発生時の処理を選ぶことができるのですが,自作のサービスでこいつを使うのにちょっと難儀しました。 まず経験的にわかっているのは,プログラムが未処理例外で落ちたときにはこの回復オプションを使ってサービスを再起動させられるということ。しかしそれを狙ってやるのはプログラムとしてどうよという気がしますし,ひとつのexeに複数のサービスが入っていた場合,すべてのサービスを巻き添えにしてしまうことになります。なのでなんとか「エラーとして」サービスを終了させられないかと考えていろいろ試してみました。 そもそもサービスのエラーとはなにかというと,A service is considered failed when it terminates without reporting a status of SERVICE_STOPPED to the
これまでUPしたエントリ。 Windowsサービスの作り方講座 その0 Windowsサービスの作り方講座 その1 Windowsサービスの作り方講座 その2 その3です。今回の予定は。 前回作ったひな型にちょっとだけユーザロジック追加 Visual Studioを使ったデバッグのやり方紹介 このぐらいまでやってみようかなと。 前回作ったひな型にちょっとだけユーザロジックを追加してみる まあ、1行のコメント行だけじゃなくて、何かしてみようかなと。んー、とネタを考えて、一定の間隔でPINGを投げて、対象が生きているかどうかを調べてファイルに吐く、なんてのを書いてみよう。 こんなフィーリングになった。*1 Public Class MyService Private goingToDie As Boolean = False Private mainThread As Threading.Th
これまでにUPしたエントリ。 これまでUPしたエントリ。 Windowsサービスの作り方講座 その0 Windowsサービスの作り方講座 その1 えーと、昨日の続き。その2です。その2でやることをまず箇条書きにしてみる。 サービス名をMyService変更する。 サービスの機能を実装するにはどうしたらいいのか説明。 どんな風に実装・分離するのがいいのか考える。*1 うーん、ひとまずこんな範囲にしておこう。残りはその3に先延ばし。 サービス名をデフォルトのService1からMyServiceに変更する 昨日までの作業の続きという前提で説明します。昨日の終わりの時点では、サービス名がService1だったので、これを任意のものに変える手順。今回はMyServiceに変えてみます。 まず、ソリューションを開いてVisual Studioを起動。Service1.vbのデザイナを表示させて、デザ
早速作り始めてみる。まずはVisual Studioを立ち上げて、新規プロジェクトを選ぶ。まあ、ここまではスムーズにできる人が対象ということで、あんまり細かすぎる事は説明しない! ここでWindowsサービスを選んで、名前には、まあ、とりあえず「MyService」とかつけます。これは適宜適切な名前をつければOK。 で、この窓が出てくる。この時点でService1.vbの中身はこんな。 Public Class Service1 Protected Overrides Sub OnStart(ByVal args() As String) ' サービスを開始するコードをここに追加します。このメソッドによって、 ' サービスが正しく実行されるようになります End Sub Protected Overrides Sub OnStop() ' サービスを停止するのに必要な終了処理を実行するコー
えーと、去年仕事で、Windowsサービスとして動くプログラムを見たり作ったりしたんだけども、それまでよく知らなかったんだよね、Windowsサービス。常駐型のプロセスとして動いて、UIとかがないぐらいしか知らなくて、どうやって作って、どうやって仕事するのかサッパリだった。でも、やってみると案外簡単にできちゃったので、ここで自分の理解を確かめつつ、整理する為に、作り方を書いてみようかなと、思う。 で、だ。まず、具体的に作り方を書いていく前に、Windowsサービスってどんな様式のプログラムなのか、どんな制約があって、何ができるのかを、作る前にもっていた疑問に答える形で書いてみようと思う。Windowsのプログラム書き始めて日が浅い人とか、きっと同じ疑問を持っていると思うので。 Windosサービスってどんなプログラム? さっきもちょっと書いたけど、常駐型のプログラムでユーザインタフェース(
2018/01/05 追記 こんなん書きました。 blog.okazuki.jp 本文 VS2015 RC時点の情報に基づいて書いています XAML系のアプリを書くときに必須となるINotifyPropertyChangedインターフェースを実装した上での、変更通知機能を持ったプロパティがあります。こいつの実装がめんどくさい&文字列指定だとダサいみたいな理由から、INotifyPropertyChangedを実装した以下のようなクラスを準備して、こいつを継承して楽をするという手がよく使われています。 public class BindableBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual bool SetProperty<T
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く