3

私はこの小さなC#winformsアプリケーションを持っていますが、これは決して大きくなることはありません。2つの入力フィールドと1つのボタンだけです。

ユーザーが入力した値をローカルデータストアに保存する方法を知っているかどうかを知りたいです。このシナリオでは、10個のレコードを大量のデータと見なすことができます。

要件

  1. データベース側からのセットアップは必要ありません。(テーブル作成など)

  2. オブジェクトを与えるだけで保存できるはずです。時間を無駄にしたくありません。

  3. データはかなり簡単に取得できる必要があります。

  4. このように作成するすべての小さなアプリでこのことを再利用できるようにしたいと思います。

私のアイデア

  1. XMLシリアル化されてローカル設定フォルダーに保存されるPOCOオブジェクト。アプリをロードすると、このファイルは逆シリアル化されてPOCOオブジェクトに戻されます。

  2. OODBMS:私はこれらの経験はありませんが、プログラムと一緒にパッケージ化するのは簡単なので、常に単一のdllで構成されていると思っていました。

  3. 私はかつて、ずっと昔に、レジストリ内にユーザー設定を保存するアプリケーションを作成しました。それでも感謝されているかどうかはわかりません。

最善のアプローチは何だと思いますか?

コードサンプルは大歓迎です!

4

3 に答える 3

3

私は両方の答えを考慮して、以下を構築しました:

public static class IsolatedStorageExtensions
{
    public static void SaveObject(this IsolatedStorage isoStorage, object obj, string fileName)
    {
        IsolatedStorageFileStream writeStream = new IsolatedStorageFileStream(fileName, FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(writeStream, obj);
        writeStream.Flush();
        writeStream.Close();
    }

    public static T LoadObject<T>(this IsolatedStorage isoStorage, string fileName)
    {
        IsolatedStorageFileStream readStream = new IsolatedStorageFileStream(fileName, FileMode.Open);
        BinaryFormatter formatter = new BinaryFormatter();
        T readData = (T)formatter.Deserialize(readStream);
        readStream.Flush();
        readStream.Close();

        return readData;
    }
}

シリアル化するデータを含むラッパー POCO オブジェクト:

[Serializable]
internal class DataStoreContainer
{
    public DataStoreContainer()
    {
        UserIDs = new List<int>();
    }

    public List<int> UserIDs { get; set; }
}

これらの拡張機能を使用するには:

private IsolatedStorageFile _isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
private DataStoreContainer _data = new DataStoreContainer();
private const string FILENAME = "MyAppName.dat";

そして、データを取得したい任意の方法で:

_data = _isoStore.LoadObject<DataStoreContainer>(FILENAME);

データを保存するには:

_isoStore.SaveObject(_data, FILENAME);
于 2010-12-10T11:07:51.550 に答える
2

分離ストレージを見たことがありますか? そのユーザー (または指定方法に応じてアプリケーション) に固有のローカル ファイルにデータを格納します。ストリームベースであるため、ストアとの間でオブジェクトを簡単にシリアル化できます。あなたの問題に対する完璧な解決策のように思えます。

于 2010-12-09T16:21:58.963 に答える
1

あなたは10個のアイテムがたくさんあると言っているので、私は#1または#1のバリエーションに投票しますバイナリシリアル化...データを読み取ることができることが重要であり、バイナリデータはあなたにもっと小さいはずだということを示していないようですファイルサイズ。ただし、10が多い場合でも、これは重要ではありません。

そうは言っても、私はdb4objectsで見たものを楽しんでいます。

于 2010-12-09T16:00:16.690 に答える