Je travaille sur une application qui lit et modifie un fichier XML en utilisant les méthodes Load() et Save() de la classe XDocument. Si une autre application, ou une autre instance de mon application est en cours d'exécution, alors un document pourrait potentiellement remplacer les modifications que l'autre a faites s'il est en mémoire xdocument ne met pas continuellement à jour (reLoading). Les programmes en cours d'exécution simultanée ne modifieraient jamais la même section du fichier XML en même temps. Quelle est la meilleure façon de résoudre ce problème? Devrais-je faire une charge juste avant de faire chaque changement ou y a-t-il une approche plus élégante?modifications simultanées au fichier xml en C#
Répondre
La meilleure solution serait de ne pas utiliser XML.
Utilisez une (petite) base de données. L'utilisation de n'importe quel type de fichier texte dans une situation multi-utilisateur est assez difficile et le fait que ce soit à des sections différentes ne peut être utilisé rentable que si vous avez des enregistrements de longueur fixe et (donc) à position fixe (lignes) . XML ne fournit pas cela.
Si vous chargez avant d'éditer, les problèmes apparaîtront moins souvent. Il y a toujours une chance que les changements soient perdus, vous aurez des conditions de course au niveau du système de fichiers. Pour le faire fonctionner, vous devez utiliser un schéma avec des fichiers de verrouillage. Vous aurez besoin d'un fichier supplémentaire pour cela.
Comme sqlite, il existe un fournisseur de données ado.net: [System.Data.Sqlite] (http://sqlite.phxsoftware.com/) – Femaref
@Femaref Cette application serait déployée sur de nombreuses machines. Quelle est la difficulté d'installer sqlite sur la machine cible et de créer la base de données? – PICyourBrain
@Femaref Quelle sera la taille de mon programme? – PICyourBrain
Vous parlez de plusieurs processus pouvant modifier le fichier. Si vous voulez conserver le fichier au lieu de mettre ces données dans un magasin commun (MS SQL), vous devrez implémenter un mutex pour vous assurer qu'une seule application peut accéder au fichier à tout moment.
pouvez-vous verrouiller le fichier lors de l'édition, ou peut-être utiliser l'instance unique du fichier ?? – genericuser
@ Priya10 instance unique ne garantit pas la sécurité des threads. – dexter
@pnya: Verrouiller le fichier n'aidera pas, vous avez besoin de déverrouiller un jour. –