Optimisation chargement XML de 10 MO
Bonjour tout le monde
J'ai un xml de 40 000 lignes faisant un peu moins de 10 Mo dont voici un exemple :
Code:
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> |
j'ai une classe XmlSerializingExtensions
Code:
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 Interface
Code:
1 2 3 4 5 6
|
public interface IDataRadiateur<T>
{
IEnumerable<T> GetAll();
} |
une classe XmlProvider
Code:
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>());
} |
et mon ViewModel :
Code:
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;
} |
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.
Pourriez vous m'aider un petit peu.
En vous remerciant d'avance