2010-09-08 4 views
0

Envisager l'élément ListView Avoir déjà deux colonnes avec plus de 35 000 lignes insérées. Maintenant, l'utilisateur sélectionne les 30 000 lignes de ListView. Je veux tous les éléments sélectionnés des données (disons que de l'article,) Sous-optionsPrise de temps supplémentaire lors de la récupération de données à partir de ListView dans C#

Voici mon code.

ListView Nom: lstViewData

 List<string> l_lstData = new List<String>(); 
     for(int l_nItem =0;l_nItem<lstViewData.SelectedItems.Count;l_nItem++) 
     { 
      l_lstData.Add(lstViewData.SelectedItems[l_nItem].Text+    
      lstViewData.SelectedItems[l_nItem].SubItems[1].Text); 
     } 

Il faudra plus d'une demi-heure dans mon PC (Configuration - IntelCore2Duo @ 2.40GHz) .Depuis le pas. des éléments sélectionnés est morethan 30 000 dans ListView

me dire Veuillez la solution Si quelqu'un sait?

+1

page les données ?! – Charlie

+0

Pouvez-vous me dire la procédure pour paginer les données – user442300

+1

Non, c'est un secret – Charlie

Répondre

0

Vous utilisez l'opérateur +:

l_lstData.Add(lstViewData.SelectedItems[l_nItem].Text+lstViewData.SelectedItems[l_nItem].SubItems[1].Text); 

vous ne devriez jamais dans un cas où il y a beaucoup d'opérations utilisent l'opérateur + sur les chaînes, comme ils sont immuables. Vous devez utiliser un StringBuilder.

l_lstData.Add(sbuilder.Append(lstViewData.Seleteditems[l_nItem].Text).Append(lstViewData.SelectedItems[l_nItem].SubItems[1].Text).ToString()); 
sbuilder.Remove(0, sbuilder.Length); 

sbuilder est une instance de StringBuilder

+0

@ RichardJ.Ross: le problème est existe toujours même si je changé l'instance de chaîne à StringBuilder. Cela est dû à la récupération des données à partir du ListView – user442300

+0

Cela n'a aucun sens, car les vues de liste sont censées être très rapides pour leur obtention et leur configuration. Alliez-vous une instance de 'StringBuilder' à chaque fois? Si c'est le cas, il suffit de réutiliser le même StringBuilder et de ne pas le réaffecter. En outre, il y avait un bug dans mon code, et je l'ai édité. –

+0

@Richard: Non, je ne l'ai pas ReInitialise l'instance stringbuilder pour l'intérieur du Loop.I il initialise avant la Loop.Still il faudra plus de 30 minutes – user442300

Questions connexes