Bonjour,
Dans mon application, je récupère des listes d'objets énormes (de 1 à 10 millions d'entités dans la liste)
Je cherche à récupérer une liste d'objets distincts, et que ce soit le plus performant possible.
Je compare mes objets entre eux en fonction d'une PK (plusieurs propriétés de mon objet)
Je connais une méthode, vu que je suis en C# 4.0, j'utilise la méthode Distinct de Linq To Object.
C'est extrêmement lent, c'est pourquoi je cherche une méthode alternative.
Voici comment je fais actuellement :
Ma classe représentant un objet et la classe "comparer de l'objet"
Code métier où je fais mon distinct sur ma liste
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
23
24
25
26 public class Article { public string ArtNr { get; set; } public short DLNr { get; set; } public int? BezNr { get; set; } public Boolean? KZSB { get; set; } public Boolean? KZMat { get; set; } public Boolean? KZAT { get; set; } public Boolean? KZZub { get; set; } public int? LosGr1 { get; set; } public int? LosGr2 { get; set; } } public class ArticleComparerPK : IEqualityComparer<Article> { public bool Equals(Article x, Article y) { if (x == null || y == null) return false; return Equals(x.ArtNr, y.ArtNr) && Equals(x.DLNr, y.DLNr); } public int GetHashCode(Article obj) { return obj.DLNr.GetHashCode(); } }
Voilà, pour info dans ce cas, pour cette liste d'objets, j'ai 3 500 000 objets, et ça me prends 46min.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ListEntities = new List<Article>(); // ... récupération des enregistrements dans ma liste .. ListEntities = ListEntities.Distinct(new ArticleComparerPK()).ToList();
Comment faire pour être plus performant ?
Partager