Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Seg rekursiv funktion

Postades av 2005-07-16 12:58:45 - Mikael Jönsson, i forum c# (c-sharp), Tråden har 6 Kommentarer och lästs av 1550 personer

Hej,

Håller på med ett program som behöver lista alla filer och undermappar i en ListView.
Problemet är att det är riktigt segt. Jag använder DirectoryInfo och FileInfo och en foreach-sats.
Funktionen körs också på en egen tråd.

Jag läste någonstans att foreach-satsen kunde vara seg ibland och bytte därför till en vanlig for-sats, men det fungerade inte heller. Då provade jag att använda Win32 API (FindFirstFile, FindNextFile, FindClose) men det gick inte snabbare för det.

Andra program jag har provat listar allting på ~2 sekunder och då är det en mapp med ~850 filer, ~50 undermappar och med ett djup på högst 3 mappar. Med mitt program tar det ungefär lika långt tid, men då med en mapp med ~100 filer, 9 undermappar och ett djup på högst 2 mappar.

Min kod ser ut ungefär såhär just nu:
<code>
public void GetFilesAndDirectoriesRecursive(DirectoryInfo myParentDirectory)
{
ListViewItem myNewItem;

FileInfo[] myFiles = myParentDirectory.GetFiles();

foreach(FileInfo myFile in myFiles)
{
myNewItem = new ListViewItem(myFile.FullName.Replace(treeViewDirectories.SelectedNode.Tag.ToString() + "\\", ""), 2);
myNewItem.SubItems.Add("");
myNewItem.SubItems.Add("");
myNewItem.SubItems.Add(ConvertBytes(myFile.Length));
myNewItem.SubItems.Add(myFile.Extension.Replace(".", "").ToUpper());
myNewItem.SubItems.Add(myFile.CreationTime.ToShortDateString());
myNewItem.SubItems.Add(myFile.LastWriteTime.ToShortDateString());
myNewItem.SubItems.Add(myFile.LastAccessTime.ToShortDateString());
myNewItem.Tag = myFile.FullName;

//if-satser som kollar med olika filter om filen ska läggas till
}

DirectoryInfo[] myDirectories = myParentDirectory.GetDirectories();

foreach(DirectoryInfo myDirectory in myDirectories)
{
//if-satser som kollar med olika filter om mappen ska läggas till
GetFilesAndDirectoriesRecursive(myDirectory);
}
}
</code>

Någon som kan ge tips på hur jag kan få det att gå snabbare?


Svara

Sv: Seg rekursiv funktion

Postades av 2005-07-16 17:55:40 - André Isaksson

Vad händer om du bara skriver ut filnamnen med Console.WriteLine eller liknande och inte använder din ListView? Eventuellt kan den replace du gör vara lite småseg.


Svara

Sv:Seg rekursiv funktion

Postades av 2005-07-16 19:53:41 - Patrik Löwendahl

Lägg till listView.BeginUpdate() innan du börjar uppdatera listan och listView.EndUpdate() när du är klar så skall du se att du får upp prestandan lite.


Svara

Sv:Seg rekursiv funktion

Postades av 2005-07-16 20:01:20 - Mikael Jönsson

Det gick _väldigt_ mycket snabbare om jag bara lade till filnamnen i en sträng och sen visade den i en MessageBox. Ungefär 15 millisekunder tog det. Men jag vill ju gärna ha det i en ListView.

Jag har stegvis kommenterat bort olika delar och det är när man skapar en ny ListViewItem det blir segt. Det har nog inget, eller väldigt lite att göra med den replace jag kör.

Nu är frågan hur jag gör för att snabba upp den biten.

Edit: Patrik, det har jag redan. Syns dock inte i koden jag visade.


Svara

Sv: Seg rekursiv funktion

Postades av 2005-07-17 13:35:35 - André Isaksson

Det jag skulle satsa på är att lägga alla filnamn i en ArrayList. När du sedan gått igenom hela din struktur kan du skapa en ListViewItemCollection och sedan bara sätta ListView.Items = dinCollection. Det blir en del fixande för att skapa en ListViewItemCollection från en vanlig Collection, men det kanske det är värt.


Svara

Sv:Seg rekursiv funktion

Postades av 2005-07-18 00:30:28 - Mikael Jönsson

Hej,

Hittade lite information här: http://www.pcreview.co.uk/forums/thread-1315025.php
Det står att Add() är väldigt seg och att det går mycket snabbare om man lägger sina items i en ListViewItem-array och sedan använder AddRange().

Jag provar detta och återkommer.


Svara

Sv: Seg rekursiv funktion

Postades av 2005-07-18 15:25:55 - Mikael Jönsson

Hej,

Det fungerade bra med ovanstående lösning.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 165
27 952
271 704
1 283
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies