Bonjour tout le monde
J'ai un xml de 40 000 lignes faisant un peu moins de 10 Mo dont voici un exemple :
j'ai une classe XmlSerializingExtensions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Radiateurs> <Radiateur Marque="FINIMETAL" Modele="Reggane 3000" Gamme="Standard" Hauteur="400" Longueur="450" Type="10S" P50="185" Pente="1.297" Volume="0.99" Poids="3.51" Prix="48.6" Reference="10S40 0450" SS="false" SSEC="true" SSM="false" SSE="false"/> </Radiateurs>
une Interface
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public static class XmlSerializingExtensions { public static XElement ToXElement<T>(this object obj) { using (var memoryStream = new MemoryStream()) { using (TextWriter streamWriter = new StreamWriter(memoryStream)) { var xmlSerializer = new XmlSerializer(typeof(T)); xmlSerializer.Serialize(streamWriter, obj); return XElement.Parse(Encoding.UTF8.GetString(memoryStream.ToArray())); } } } public static T FromXElement<T>(this XElement xElement) { var xmlSerializer = new XmlSerializer(typeof(T)); return (T)xmlSerializer.Deserialize(xElement.CreateReader()); } }
une classe XmlProvider
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public interface IDataRadiateur<T> { IEnumerable<T> GetAll(); }
et mon ViewModel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class RadiateurXmlProvider : IDataRadiateur<Radiateur> { private readonly XDocument doc; private readonly string xmlFilePath; public RadiateurXmlProvider(string xmlFilePath) { this.xmlFilePath = xmlFilePath; doc = XDocument.Load(xmlFilePath); } public IEnumerable<Radiateur> GetAll() { return doc.Descendants("Radiateur").Select(element => element.FromXElement<Radiateur>()); }
mon problème est quand je charge mon UserControl, il met entre 13 et 20 secondes pour se charger, comment pourrais je optimisé cela. J'ai lu que la Class XmlReader est plus efficiente pour les gros fichier XML mais je ne sais pas trop comment la mettre en oeuvre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public SelectionRadiateurViewModel() { RadiateurProvider = new RadiateurXmlProvider("Radiateurs.xml"); base.DisplayName = Strings.SelectionRadiateurViewModel_DisplayName; } public SelectionRadiateurViewModel(IDataRadiateur<Radiateur>providerradiateur) { RadiateurProvider = providerradiateur; }
Pourriez vous m'aider un petit peu.
En vous remerciant d'avance
Partager