2009-12-21 5 views

Répondre

2

De combien de données parlons-nous?

J'ai utilisé un ancien périphérique (HTC-s620, avec un processeur TI OMAP 850 200 MHz) pour enregistrer un fichier XML de 2 Mo en utilisant XML Serialization, en 3-5 secondes. Modèle de programmation très simple. Très facile à faire. Avec un appareil plus récent, je suis sûr que ce serait beaucoup plus rapide. Mon scénario d'utilisation était une charge complète et une sauvegarde complète, par cycle.

[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; 
    } 

} 
+0

Le principal problème avec XML est que vous ne pouvez pas effectuer d'écritures "naïves". Vous avez besoin de sauvegardes (copier, vider, supprimer, déplacer, ou tout simplement copier, vider et supprimer la copie) car dans une fenêtre de 2-3 secondes l'alimentation peut mourir et corrompre votre fichier. – Quibblesome

1

Les périphériques capables de courir Win Mobile 6, semblent pouvoir se débrouiller assez bien en utilisant le framework .NET "paralysé".

Mais si vous voulez quelque chose de plus rapide que ce que System.IO fournit, je pense que vous n'avez pas de chance (?).

Avec "types personnalisés", je suppose que vous faites référence à des classes, et par cela je soupçonne certaines classes compatibles .NET? Ensuite, je ne vois pas comment vous allez presser plus de jus ... au moins pas plus de
this happy camper obtenu.

1

Je vous recommande de regarder SqlLite si vous voulez un bon db mais sans le ballonnement. SqlLite est également atomique et résilient. Sinon, l'enregistrement dans un fichier plat n'est pas un problème. Rappelez-vous juste que le pouvoir peut mourir sur vous à tout moment, y compris à mi-chemin à travers votre écriture.

Questions connexes