Ik schrijf een programma waarin zeer grote bestanden gestreamed moeten worden. Uiteraard wil je daarbij niet dat de system cache volloopt waardoor zo'n beetje alle andere dingen op je systeem baggertraag worden. In een unmanaged taal zou ik die files openen met de flag FILE_FLAG_NO_BUFFERING, maar ik kan in .NET (2.0) daar geen equivalent voor vinden.
Ik heb wel een artikel gevonden waarin staat hoe je die flag kan gebruiken (weet alleen niet of dat werkt), maar dat is unsafe code en ik weet niet zeker of dat ook goed werkt op het x64 en IA64 framework. Dat is nml wel belangrijk, dat dat werkt...
Wat ik nu heb, is een FileStream object dat wordt aangemaakt met FileOptions.WriteThrough voor het schrijven van grote bestanden, en FileOptions.SequentialScan voor het lezen ervan. Maar geen van deze omzeilt de system cache. De eerste omzeilt alleen maar de fysieke schrijfcache van de harddisk zelf. De tweede "optimaliseert" de file handle voor sequentieel lezen; leuk, maar het lost mijn probleem niet op.
Iemand een nette oplossing? Liefst een die niet "unsafe" is en op x86, x64 en IA64 werkt?
Ik heb wel een artikel gevonden waarin staat hoe je die flag kan gebruiken (weet alleen niet of dat werkt), maar dat is unsafe code en ik weet niet zeker of dat ook goed werkt op het x64 en IA64 framework. Dat is nml wel belangrijk, dat dat werkt...
Wat ik nu heb, is een FileStream object dat wordt aangemaakt met FileOptions.WriteThrough voor het schrijven van grote bestanden, en FileOptions.SequentialScan voor het lezen ervan. Maar geen van deze omzeilt de system cache. De eerste omzeilt alleen maar de fysieke schrijfcache van de harddisk zelf. De tweede "optimaliseert" de file handle voor sequentieel lezen; leuk, maar het lost mijn probleem niet op.
Iemand een nette oplossing? Liefst een die niet "unsafe" is en op x86, x64 en IA64 werkt?
日本!🎌