web-dev-qa-db-ja.com

C#.NET-非常に小規模な永続情報を保存する方法は?

永続ストレージをほとんど必要としないアプリケーションがあります。現実的には、30未満の整数について話しています。アプリケーションに必要なのは、次回の起動時にこれらの整数を知ることだけです(そして、整数は実行時に変化します)。

データベースはこれにはやり過ぎですが、私は特にテキストファイルだけを使いたくありません。

C#には、実行間でこのような小さな値を永続化するメカニズムがありますか?リソースファイルやその他の場所に保存できることに気づきましたが、ランタイムで変更できるかどうかはわかりません。私は新しい仕事のためにC#と.NETを学んでいるところなので、これがばかげた質問であるならお詫びします!

これは 別のSOのぼかし アプリケーション設定のセットアップ方法を説明する投稿です。これは値の読み取り/書き込みのための単純なファイルベースのソリューションです。

"Visual Studioを使用している場合、永続的な設定を取得するのは非常に簡単です。ソリューションエクスプローラーでプロジェクトを右クリックし、[プロパティ]を選択します。[設定]タブを選択します。設定が存在しない場合は、ハイパーリンクをクリックします。[設定]タブを使用して、アプリケーション設定を作成します。VisualStudioは、継承されたシングルトンクラスSettingsを含むファイルSettings.settingsおよびSettings.Designer.settingsを作成します。 ApplicationSettingsBaseから。コードからこのクラスにアクセスして、アプリケーション設定の読み取り/書き込みを行うことができます: "

Settings.Default["SomeProperty"] = "Some Value";
Settings.Default.Save(); // Saves settings in application configuration file
24
Zachary

埋め込まれたsqliteデータベースを使用します。

http://www.codeproject.com/Articles/22165/Using-SQLite-in-your-C-Application

SQLiteは、データベースエンジンとインターフェイスが単一のライブラリに結合された、小さくて高速で埋め込み可能なデータベースです。また、すべてのデータを1つのファイルに保存する機能もあります。したがって、アプリケーションでスタンドアロンデータベースが必要な場合は、SQLiteがおそらく最適です。もちろん、SQLiteを選択する理由は他にもあります。

SQLiteはメモリフットプリントが小さく、データベースにアクセスするために必要なライブラリは1つだけなので、組み込みデータベースアプリケーションに最適です。 SQLiteは多くのプラットフォームに移植されており、WindowsCEやPalmOSでも動作します。 SQLiteはACIDに準拠しており、原子性、一貫性、分離性、耐久性の4つの基準すべてを満たしています。 SQLiteは、ビュー、サブクエリ、トリガーなど、ANSI-92SQL標準の大規模なサブセットを実装しています。追加のデータベースドライバの問題はありません。ODBC構成が必要です。ライブラリとデータファイルをアプリケーションに含めるだけです。SQLiteには、C/C++、PHP、Perl、Python、Tclなどのネイティブ言語APIがあります。 。C#のネイティブAPIはまだ存在しません。

6
Nesim Razon

リストをxmlファイルにシリアル化するだけです。これはあなたがそれを保存する方法です:

var xs = new System.Xml.Serialization.XmlSerializer(typeof(List<int>));
List<int> ints = new List<int> { 1, 2, 3 };

using (FileStream fs = new FileStream(@"C:\store.xml", FileMode.OpenOrCreate))
{
    xs.Serialize(fs, ints); 
}

そして、それを取得することも同様に簡単です。

using (FileStream fs = new FileStream(@"C:\store.xml", FileMode.OpenOrCreate))
{
    ints = xs.Deserialize(fs) as List<int>;
}
5
Steve Danner

C#4.0以降を使用している場合は、新しい メモリマップトファイル を確認することをお勧めします。

永続メモリマップトファイルを使用すると、ファイルが簡単になりますが、メモリにマップされる速度は速くなります。もちろん、ファイル形式は自分で管理する必要があります。

  • 永続化されたメモリマップファイル

永続ファイルは、ディスク上のソースファイルに関連付けられているメモリマップファイルです。最後のプロセスがファイルの処理を終了すると、データはディスク上のソースファイルに保存されます。これらのメモリマップファイルは、非常に大きなソースファイルでの作業に適しています。

これはおそらく30の整数ではやり過ぎかもしれませんが、特に速度が重要な場合は別のオプションです。

4
OffHeGoes

私はファイルストレージを選択し、データベースやレジストリを避けます。最初はフレームワークの多くに必要であり、2番目は...まあ、レジストリで遊ぶことはありません:)

xMLをファイルストレージとして使用すると、これは素晴らしい読み物です。

XMLファイルをどのように解析しますか?

ファイルを作成してすべてのIDを同じノードに保存することも、ノードごとに1つのIDを書き込むこともできます。それはあなた次第です。

<?xml version="1.0" encoding="utf-8" ?> 
<settings>
    <selected>
        <id>1</id>
        <id>8</id>
        <id>12</id>
        <id>15</id>
    </selected>
</settings>

そのようなファイルを作成するには:

  XmlDocument doc = new XmlDocument();
  XmlElement set = (XmlElement)doc.AppendChild(doc.CreateElement("settings"));
  XmlElement sel = (XmlElement)set.AppendChild(doc.CreateElement("selected"));

  int[] selectedIds = new int[] { 1, 2, 3, 4, 5 };

  foreach (int id in selectedIds)
     sel.AppendChild(doc.CreateElement("id")).InnerText = id.ToString();

  string path = Path.GetDirectoryName(Application.ExecutablePath);
  doc.Save(path + "/settings.xml");

読むには、XmlReaderXmlTextReaderXDocumentなどを使用できます。

3
balexandre