Results 1 to 5 of 5

Thread: Hoe de Windows file read cache uitschakelen?

  1. #1

    Hoe de Windows file read cache uitschakelen?

    Iemand enig idee hoe de Windows(7) file read cache te verhinderen voor 1 bepaalde file (of desnoods voor een hele drive)?

    Alvast bedankt!
    Vriendelijke groeten,
    Dany

  2. #2
    I7 7700K 32Gb Win10 Pro Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    1,918
    Waarom ? Een write kan ik nog begrijpen maar om te lezen??
    10.3.1, Delphi2010, of Lazarus 2.0.2

  3. #3

  4. #4
    Quote Originally Posted by Wok View Post
    Waarom ? Een write kan ik nog begrijpen maar om te lezen??
    Omdat de 'file' geen file is maar in realiteit een USB randapparaat (USB MSD device, gedraagt zich als een extra drive). Schrijven naar de file betekent data zenden naar het device, lezen uit de file betekent data ontvangen van het device. Uiteraard betekent het laatste dat er niet gelezen mag worden uit de Windows file cache... anders lees je terug wat je zelf net hebt gezonden. Eigenaardig genoeg heb ik geen problemen met de write cache...

    Na enig opzoekwerk bleek het volgende te werken:

    Code:
    Handle := CreateFileA(
    PAnsiChar('G:\TEST.TXT'),              // filename
    GENERIC_READ or GENERIC_WRITE,  // desired access
    FILE_SHARE_WRITE,                      // sharemode
    nil,                                             // security attributes
    OPEN_EXISTING,                          // creation disposition
    FILE_FLAG_NO_BUFFERING,            // Flags and attributes  <------- dit doet het 'm
    0);                                            // template file
    
    SetFilePointer(Handle, 0, 0, 0); // beginning of file
    WriteFile(Handle, WriteBuff, 512, BytesWritten, 0); // read buffer
    
    SetFilePointer(Handle, 0, 0, 0); // beginning of file
    ReadFile(Handle, ReadBuff, 512, BytesRead, 0); // read buffer
    
    CloseHandle(Handle);
    Merk ook op dat het schrijven en het lezen moet gebeuren op sectorgrenzen (dus mod 512 = 0), en dat het aantal gelezen of geschreven bytes ook gelijk moet zijn aan de sectorgrootte van de file (hier 512 bytes).

    Het werkt, maar traag! Gemiddeld 4 millisecs voor een lees of schrijfoperatie. Natuurlijk zit USB daar ook voor iets tussen.
    Het voorbeeld hierboven leest/schrijft alleen sector 0 van de file.
    Last edited by Dany; 24-Apr-19 at 20:45.
    Vriendelijke groeten,
    Dany

  5. #5
    Quote Originally Posted by marcov View Post
    Welbedankt! Dat heeft mij op het spoor van de oplossing gezet, zie de post hierboven).
    Last edited by Dany; 24-Apr-19 at 21:25.
    Vriendelijke groeten,
    Dany

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •