ラベル C# の投稿を表示しています。 すべての投稿を表示
ラベル C# の投稿を表示しています。 すべての投稿を表示

2019-01-22

Azure Table Storageの使い方 ~テーブルへの接続~

Azure Table Storageとは
Azure Table Storageは、AWSでいうDynamoDBの位置づけのようです。料金的にも容量とアクセス数のみらしいので(誤解しているかもしれないが)、いろいろ考えた末、Azure Table StorageをラボのメインDBに変えていこうか、、という結論に至りました。

Azure Table Storageのセッティング
Azure Table Storageは、Azure Storageの機能の一つとなっています。セッティングは簡単です。ポイントだけ書いていきます。
  • AzurePortalサイトからStorageアカウントは作成しておく
  • テーブルは事前に作成しなくても良い
  • Storageアカウントのアクセスキーより、接続文字列を入手しておく

Visual Studio の設定
下記の2つのライブラリをNugetで明示的に取得しておく
  • WindowsAzure.Storage
  • Microsoft.WindowsAzure.ConfigurationManager
Nugetマネージャーを見てみると他のライブラリも登録されていましたが、これらに付随してインストールされた可能性あり。

サンプルコード
アカウント情報(アクセスキーなど)はコードに直接記述せず、App.configファイルに記述してプログラムにアクセスするのが基本です。下記のようにApp.configファイルに記述します。
<appSettings> <add key="StorageConnectionString" value="XXXXXXX" /> </appSettings>
XXXXXのところは、上記で取得した接続文字列をそのままコピペしてください。

下記のコードは、"SampleTable"というテーブルに接続している例です。



2018-08-22

Dynamic Data Display がInteractive Data Display for WPFへ

おちラボでは、WPFでのグラフ表示にD3(Dynamic Data Display)を利用していましたが、いつのまにか(約1年ほど前に)、Interactive Data Display for WPFという名前で新しくリリースされていた模様。
D3は5年以上も更新がされておらず、それに代替するライブラリとして を一部で利用していたのですが、Microsoft謹製ということで、Interactive Data Display for WPFのほうがいいのかどうか。。。以前と変更点はあるのか、、要チェックですね。

2017-07-25

C#:画像ファイルをいろいろ扱っていたらOutofMemoryエラー出る場合の対処法

100ページ超のマルチページTiffファイルを解析するプログラムを稼働させているとメモリ使用量がどんどん上がっていき、4つほどファイルを読んだらメモリオーバーで落ちてしまうという減少に随分前から悩まされてきました。その解決策がようやく判明。
GC.Collect();
GC.WaitForPendingFinalizers();  
GC.Collect();
というように、ガーベージコレクションを発動させるだけでなく、赤字の処理を追記したほうがいいらしいです。GC.Collect()で挟むと良いようです。いままでGC.Collect()しか記述してなかったです。ググると既知のTIPSのようですね。

プログラムでは、OpenCVSharpを使ったりしているので、そのあたりのバグかな~とか思ったりもしましたが違いましたね。おかげで、メモリ使用量が全く増えることなく稼働できています。

2017-02-04

OpenCVSharpでテンプレートマッチング処理(OpenCV3.0対応)

OpenCVSharpでテンプレートマッチング処理。OpenCV3.0対応の記述です。
前バージョンとは若干の記述(クラス)が違いますが、基本的には同じですね。



OpenCVSharp:Mat変数の渡し方に注意

ちょっと初歩的なところで躓いたのでメモ書き。OpenCVSharpのプログラムで、
Mat mat = new Mat()
methodA(mat);
methodB(mat);
みたいなことをしました。各メソッドはほぼ同じことしてます。が、後者のメソッドが思ったように動かないケースに遭遇し、ちょっと格闘しました。

Matは基本参照渡し
結論(解決策)は、Matは基本参照渡しだということ。つまり、methodA内で変数matを処理したら、呼び出し元でも反映されているということ。つまり、上記の例では、Aに渡されるmatとBに渡されるmatは別物です。
もし、同じmatを渡したいなら、closeメソッドでコピーを作ってそれを渡しましょう。

2017-02-03

XAML の UI デバッグツールを無効にする


最近、やっとVisual Studio2015を使い始めたのですが、実行するとなにやら変な物が出ます。上の画像みたいな黒いやつです。これは、
  • 実行中の WPF アプリケーションのビジュアル ツリーやツリー内の任意の要素のプロパティを検査することができます(Visual Studio日本チームBLOGより
という優れものらしいですが、とりあえず今の私には不要なので、邪魔。。。

というわけで、消し方ですが、
  • デバッグ > オプション メニューより、デバッグ > 全般 > XAML のUI デバッグツールを有効にするのチェックを外す
で解決です。

ホントは、使いこなせたほうがいいんでしょうけど、とりあえず。



2017-01-19

C#からPythonを呼ぶ(非同期処理)

先のC#からPythonを呼ぶサンプルコードは、一度実行したら終わりというケースです。実行中のPythonプログラムに標準入出力を利用してデータの授受をするのは、下記のコードがベターです。



2016-08-02

C#:BitmapFrame を利用する使用する場合の参照設定

小ネタです。BitmapFrameクラスを使おうとすると、参照が足りないみたいなエラーが出ます。下記の2つを参照設定に追加しましょう。
  • Presentation.Core
  • System.Xaml
2番目のXamlが必要というのが盲点でした。


2016-06-17

C#:Activeになっているウィンドウのアプリケーション名を取得する

ちょっと自分の行動ログを取りたくなったので、利用しているアプリケーション名を取得するコードを書いてみました。これをタイマーで逐次チェックしていけばいいでしょう。いちおう、Win32APIを利用してます。



2015-11-20

C#:null 許容型

C#のプログラムをググっていると、
  • bool? とか int?
みたいな型に遭遇することがあります。これは、null 許容型クラスと言われているもので、、基礎となる値型の正しい範囲の値だけでなく、null 値も表すことができます。

2015-09-10

C#でマルチページ形式のTiff画像を表示する方法(WPF編)

WPFでのC#でマルチページ形式のTiff画像を表示する方法は、下記のようになります。若干、Formの時よりもシンプルになりますね。


2015-08-18

Dynamic Data DisplayのY軸を固定する

WPFでグラフ表示をするには、D3(Dynamic Data Display)を利用するのが定番ですが(おちラボでは)、DynamicゆえにY軸がダイナミックに動いてしまうのが利点であり、欠点、、、で、Y軸を固定する方法が以前はよくわからなかったのですが、最近なぜかすんなり見つかりましたので、、、gistにアップしたのを下記に上げておきます。



2015-08-17

C#でマルチページ形式のTiff画像を表示する方法(Form編)

C#でマルチページ形式のTiff画像を表示する方法です。Formアプリケーションの場合です。


WPFで画像表示が荒いと感じた場合の設定

WPFを本格的に使いだして2年目ですが、まだまだよくわからないところがありますね。tiffファイルの表示をWPFでやろうと思ったら、やけに荒い。。。WPFってUI周りが綺麗になるんじゃないの?Formの時より汚くなってるジャーンって、いろいろ調べて解決策がわかりました。XAMLのウィンドウタグに
  • RenderOptions.BitmapScalingMode="HighQuality"
のパラメータを設定すれば、OKです。どれだけ違いがあるのかは、下記のとおりです。

【デフォルト設定】


【HighQuality設定】


おわかりいただけだだろうか?


C#にてExcelの検索機能(Find関数)を利用する

C#からExcelのシートを検索するときには、下記のようにFind関数とFindNext関数を組み合わせればOKです。注意点としては、検索の開始位置は初期値の次の位置です。例えば、下記のコードを利用した場合、指定した列の2行目から検索が始まります。



2015-04-24

C#で物理アドレス(Macアドレス)を取得する方法

C#で物理アドレス(Macアドレス)を取得する方法です。以下のサンプルは1つだけ返してます。


2015-04-23

Byte[]に入っているRGB情報からOpenCVのIplImageに変換する方法(OpenCVSharp)

Byte配列に入っているイメージデータ(RGB情報)から、OpenCVのIplImageへ変換する方法です。今まで、WritableBitmapに変えてから変換してたんですが、これで処理が削減されます。


2015-04-17

Gridパネルに配置された子要素を行列指定で取得する

WPFのGridパネルに配置された子要素を行列指定で取得する方法です。直接参照はできないようで、ラムダ式を使って検索をかけて該当する子要素をとってくるという形式になります。WPFでのUIコンポーネントの配置や参照方法はいまいち癖がありますね


2015-03-13

byte[]に入っているRGB情報からWritableBitmapに変換する方法

byte[]に入っているピクセルのRGB情報からWriteableBitmapに変換する方法を2つ紹介します。個人的には前者がシンプルで好きですが、後者のほうが速いかもしれません(未確認)。

BitmapFrame.Create編
Marshal.Copy編


2015-03-04

WPFでDoEventsを実現する

WindowsプログラミングというかVisualBasicの古くからあるおまじない的なメソッドとしてDoEventsがあります。これはOS側に処理を一旦渡す処理を行ってくれるので、ループ処理で重くなったUI描画を軽くしたい(実行させたい)ときに使う常套手段でした。昔のWindowsは擬似マルチタスクでしたからこのような処理が有効でしたが、現在はマルチスレッド化で対応するのが奨励されています。
ただ、マルチスレッド化するまでもない処理もあるわけで、.Net Frameworkに移行してからも「Application.DoEvents」というメソッドが残っており利用されてきましたが、WPFのフレームワークではそれがなくなってしまいました。
で、その代替手段が下記のコードになります。DispacherFrameというWPFのUIキューを呼び出してそれをInvokerにより実行させることで、UIの描画処理を行わせてます。