"Say unto thine own heart, I am mine own redeemer"
Don't touch me when I'm crazy of that airplane glue
Läsa kataloger parallellt med F#
nyfiken på om det verkligen går fortare, eftersom du måste läsa på massa olika ställen på hårddisken?
Om du slänger på
|> Seq.fold Seq.append Seq.empty
så att du får
let rec GetDirrs root =
Seq.append
(root |> Directory.GetFiles |> Array.filter(fun x -> x.ToLower().EndsWith(".exe")) |> Array.toSeq)
(Async.Parallel[for subdir in Directory.GetDirectories(root) -> async{ return GetDirrs subdir}] |> Async.RunSynchronously |> Seq.fold Seq.append Seq.empty)
så fungerar det.
Ett tips är att om du explicit skriver in typen på funktionen du skriver så kan det bli lättare att hitta felet, för då försöker inte kompilatorn att hitta på en ny typ som inte stämmer pga något annat fel i funktionen.
let rec GetDirs (root:string) : seq<string> = ...
Genom att använda funktionen collect så kan man skriva funktionen så här:
let rec GetDirs path =
Array.append
(path |> Directory.GetFiles |> Array.filter (fun x -> x.ToLower().EndsWith(".exe")))
(path |> Directory.GetDirectories |> Array.Parallel.collect GetDirs)
Då kan man lätt byta Array.Parallel.collect mot Array.collect ifall man vill köra sekventiellt istället.
Som gothxx misstänkte så går det i praktiken väldigt mycket långsammare att köra det här parallellt, antagligen för att trycket på filsystemet gör att det chokar.
- Idag Sony läcker uppgifter i rättegång – så stort är Call of Duty 16
- Igår Nvidia: "Energieffektiva RTX 4060 sparar hundralappar" 38
- Igår MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare 48
- Igår Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer 15
- Igår Nvidias nästa arkitektur för Geforce kommer år 2025 58
- Idag Youtube testar aggressiv taktik mot annonsblockerare 1
- Igår Veckans fråga: Vilket operativsystem föredrar du? 84
- Igår Bilar med smarta inslag ger fler dumma fel 64
- 27 / 6 Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år" 90
- 26 / 6 Lastpass-användare rasar – kan inte logga in 59
- Rekommendation för lödkolv?10
- Wordle på svenska - ordlig.se5944
- Mekaniska tangentbord och tillbehör, allmän diskussion och frågor.6381
- Grafikkort med Vulkan, vad?0
- Ert dyraste ” datormisstag”?404
- Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år"90
- Irriterande förändring Bitwarden/Chrome12
- funderade på att köpa ett nytt system: amd eller intel?13
- Vad spelar du för tillfället?725
- Veckans fråga: Vilket operativsystem föredrar du?85
- Säljes Intel Core i5 13400F
- Säljes Gamingdator 4080 / 13700KF / 32GB DDR5
- Säljes I5 12500
- Säljes LG 27'' UltraGear 27GP950 4K Nano IPS 160 Hz HDMI 2.1
- Säljes Star Wars Jedi AMD kod
- Säljes Trasig Xiaomi Mi Electric Scooter (M365) Svart
- Säljes 5800x3D + x570 Meg Unify + be quiet! Dark Rock Slim
- Säljes AMD ASUS DUAL RX6700XT
- Säljes Dell OptiPlex 7010
- Säljes Datordelar: i5 9600k + 1070 GTX mm.
- Youtube testar aggressiv taktik mot annonsblockerare3
- Sony läcker uppgifter i rättegång – så stort är Call of Duty16
- Nvidia: "Energieffektiva RTX 4060 sparar hundralappar"38
- MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare48
- Veckans fråga: Vilket operativsystem föredrar du?85
- Bilar med smarta inslag ger fler dumma fel64
- Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer15
- Nvidias nästa arkitektur för Geforce kommer år 202558
- Microsoft vill strömma Windows från molnet72
- Starfield utvecklas med AMD:s välsignelse154
Externa nyheter
Spelnyheter från FZ
- Över tre miljoner exemplar av Final Fantasy XVI har skeppats och sålts idag
- Sony råkar avslöja spelbudgetar och annat på grund av dålig märkpenna idag
- Alan Wake och CoD: Kallt krig snart på PS Plus igår
- Red Dead Redemption åldersmärkt igen i Korea – det spekuleras i remaster igår
- Fallout London flyttas för att slippa Starfield-konkurrensen igår