26

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

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

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

4

6 に答える 6

27

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

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

Settings.Default["SomeProperty"] = "Some Value";
Settings.Default.Save(); // Saves settings in application configuration file
于 2012-04-25T21:14:01.763 に答える
6

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

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

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

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

于 2012-04-25T21:06:00.067 に答える
6

リストを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>;
}
于 2012-04-25T21:11:40.693 に答える
4

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

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

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

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

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

于 2012-04-25T21:29:30.857 に答える
3

私はファイルストレージを選択し、データベースやレジストリを避けます。最初はフレームワークの多くに必要であり、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");

XmlReader読むためにXmlTextReader、、、などを使用することができますXDocument...

于 2012-04-25T21:14:38.883 に答える
0

永続化のための追加レイヤーとしてライブラリをIMemoryCache使用できます!AcroFS

必要なのは、.Persistent()メソッドを呼び出してメモリキャッシュの永続インスタンスを取得することだけです。

_memoryCache
   .Persistent()
   .Set(key, value, TimeSpan.FromMinutes(1));

キャッシュする必要がない場合は、:AcroFSなしで簡単に使用できます。IMemoryCache

var _repository = FileStore.CreateStore();

// store the model with a custpm key
_repository.Store("my-model", MyModel);

// load model
var model = _repository.Load<MyModel>("my-model");

于 2022-02-11T11:18:38.557 に答える