c ++ - Windows standbyhukommelse opbygges, når du skriver til fil

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skriver en appliction i C ++, der skal skrive store filer (op til 100 GB) til SSD-disk. Den kører på Windows 10. Jeg bruger ms std :: fstream til filskrivning. Problemet er at under denne proces øges Windows standby-hukommelse til urimelige mængder: Det bliver omtrent lige så meget som antallet af data, der aktuelt er skrevet til disken, og bygger op med det. Når dette beløb når størrelsen på computerens RAM (64 Gb), begynder hele systemet at ligge enormt, hvilket påvirker præstationen. Hastigheden er vigtig for applikationen, da den får kildedata i realtid fra hardwareenheden. Det er værd at bemærke, at dataene faktisk bliver skrevet til filen, så det er ikke nødvendigt (så vidt jeg kan se) at gemme det i RAM. Også programmets RAM forbrug forbliver stabilt på 25 Mb, så der ser ud til at være ingen hukommelsesleje.
Hvis jeg bruger eksternt værktøj som EmptyStandbyList.exe under processen til at tørre systemets standby-hukommelse, fungerer alt glat.
Hvis jeg kommenterer filen writting-kode, så opbygges ikke hukommelsen.
Anti-malware-softwaren er deaktiveret.


Denne situation kan reproduceres ved hjælp af følgende legetøj eksempel:


#include <iostream>
#include <memory>
#include <fstream>

static const size\_t data\_size = 1024 * 1024;

struct Packet
{
    char data[data\_size];
};

int main(int argc, char** argv)
{
    uint64\_t packet = 0;
    std::ofstream out("buffer", std::ios\_base::binary);
    while (true)
    {
        std::shared\_ptr<Packet> ptr = std::make\_shared<Packet>();
        out.write(ptr->data, data\_size);
        packet++;
        if (packet \% 1024 == 0)
        {
            std::cout << packet << std::endl;
        }
    }
}


(Jeg bruger ms. Visual Studio 2013 Community Edition.)


Så spørgsmålet er: er der nogen måde at undgå denne hukommelse opbygning?

Bedste reference