Какой способ сохранения пользовательских типов в файл на мобильном устройстве? - PullRequest
1 голос
/ 21 декабря 2009

У меня есть список пользовательских типов, их нужно сохранять / загружать в / из файла на мобильном устройстве (Windows Mobile 6), какой метод будет наиболее подходящим, учитывая ограниченные ресурсы устройства? РЕДАКТИРОВАТЬ: Файл данных будет около 2-5 МБ

Ответы [ 3 ]

2 голосов
/ 21 декабря 2009

Сколько данных мы говорим?

Я использовал старое устройство ( HTC-s620 , с процессором TI OMAP 850 200 МГц) для сохранения XML-файла размером 2 Мб с использованием XML-сериализации в течение 3-5 секунд. Очень простая модель программирования. Очень легко сделать. С более новым устройством я уверен, что это будет намного быстрее.

Мой сценарий использования: одна полная загрузка и одно полное сохранение за цикл.

[XmlRoot("notes")]
public class NoteList : List<Note>
{
    // Set this to 'default' or 'preserve'.
    [XmlAttribute("space", Namespace = "http://www.w3.org/XML/1998/namespace")]
    public string space = "preserve";

    public static void Save(NoteList noteList, string NotesFilePath)
    {
        if (noteList == null) return;
        XmlSerializer serializer = new XmlSerializer(typeof(NoteList));

        string tmpPath = NotesFilePath + ".tmp";
        using (System.IO.FileStream fs = new FileStream(tmpPath, FileMode.Create, FileAccess.Write))
        {
            serializer.Serialize(fs, noteList);
            fs.Close();
        }

        if (File.Exists(tmpPath))
        {
            if (File.Exists(NotesFilePath))
            {
                string oldFile = NotesFilePath + ".bak";
                if (File.Exists(oldFile)) File.Delete(oldFile);
                File.Move(NotesFilePath, oldFile);
            }
            File.Move(tmpPath, NotesFilePath);
        }
    }


    public static NoteList Load(string NotesFilePath)
    {
        if (!System.IO.File.Exists(NotesFilePath))
            return null;

        NoteList noteList = new NoteList();
        XmlSerializer serializer = new XmlSerializer(noteList.GetType());
        using (FileStream fs = new FileStream(NotesFilePath, FileMode.Open, FileAccess.Read))
        {
            noteList = (NoteList)serializer.Deserialize(fs);
            fs.Close();
        }

        return noteList;
    }

}
1 голос
/ 21 декабря 2009

Я бы порекомендовал посмотреть на SqlLite, если вы хотите получить правильный дб, но без раздувания. SqlLite также устойчив к атомам и энергии. В противном случае сохранение в плоский файл не является проблемой. Просто помните, что сила может умереть от вас в любой момент, в том числе на полпути к вашей записи.

1 голос
/ 21 декабря 2009

Устройства, способные работать с Win Mobile 6, по-видимому, способны справляться с собой достаточно хорошо, используя «искалеченную» платформу .NET.

Но если вы хотите что-то быстрее, чем то, что обеспечивает System.IO, я думаю, вам не повезло (?).

С "пользовательскими типами" я понимаю, что вы имеете в виду классы, и, как я подозреваю, некоторые .NET-совместимые классы? Тогда я не понимаю, как ты собираешься выжать больше сока ... по крайней мере, не более чем
этот счастливый турист получил.

...