ご無沙汰しております。
週末でC言語のポインタ本読了してました。
Web系にいるものの、最近こういう低級言語に触れ合っているとなんとも言えない楽しさを感じるので 会社が終わるとそっちの方ばっかりいじってます。
ところで、ここ数日は色々と細かいタスクが増えてきたので 自分用に簡単なGTDのツールをつくろうとLINQまわりをいじっていました。
今回はXMLの保存・読み込みということで記事投稿。
準備
using System.Xml.Linq; // XDocument オブジェクトを使用する。 using System.IO; // ファイルの保存・読み出し時に必要。
とりあえずアセンブリ参照の追加。
XMLをつくってみる。
XDocument F = new XDocument(); F.Add(new XElement("RootNode")); // ノードの追加 F.Save(FileName);
これで FileName に指定したパス・ファイル名でxmlデータが保存される。
今回はこんな感じ。
<?xml version="1.0" encoding="utf-8"?> <todolist />
※ XMLにルート要素の追加をせずに保存すると読み出しの際にランタイムエラー吐くので注意。
ちょっといじってみた感じ、よくあるXML操作関連のAPIのような操作性で直感的に操作できて良い感じ。
つくったXMLを読み出してみる。
せっかく保存しても読み込みができないとさびしいので、読み込んでみる。
XDocument F = new XDocument(); if(File.Exists(FileName)){ F.Load(FileName); }
てな感じで 保存したXMLドキュメントの読み込みができる。
でも一つのXMLファイルに大量のノードファイル詰め込んだらパフォーマンス落ちるんじゃないの?
と思って50,000ノードほど単純な文章を連ねたXMLファイル(約24MB)を追加してデバッグしてみたけど、
読み込みが描画処理含めて 250ミリ秒 とかなので、日頃使う簡単なツールの実用には困らないレベル。
( 因みに その時は
<Root> <createdDateTime>~~~~~~~</createdDateTime> <description>はじめてのしーしゃーぷでりんくをためしてみるよ</description> </Root> : :
という感じの、深さが全く無いノード構成だったからスピードが出ていた可能性も。
ノードが深くなった場合とか複雑化してきた場合は未計測 )
とはいえ、たった一つのXMLファイルに全てのデータを入れて 万が一データ破損でもしたら一発でおしまいだろうから、
ちゃんと作りこむなら定期的にバックアップファイル生成するとか 分散管理とか 別の施策が必要なにおいはする。
(ちょっと寄り道)Configurationを使ってみる
using Configuration; // AppSettingsReader オブジェクトを使用する。
App.configへの追記。
<Configuration> ~ </Configuration> の間に以下のコードを追加。
<appSettings> <add key="DataFile" value="C:\Users\hoge\Desktop\data.xml" /> </appSettings>
こんな感じで登録しておけば、
string FileName = (string)(AppSettingsReaderインスタンス.GetValue("DataFile", typeof(string)));
こんな感じで参照可能。
Written by Nisei Kimura ( 木村 仁星 )