Pracuję nad aplikacją przeznaczoną dla systemów desktopowych, które mogą mieć tylko 256 MB pamięci RAM (Windows 2000 i nowsze). W mojej aplikacji mam ten duży plik (> 256 MB), który zawiera stałe zapisy około 160 bajtów na każdy. Ta aplikacja ma dość długi proces, w którym z czasem będzie losowo uzyskiwać dostęp do około 90% pliku (do odczytu i zapisu). Dowolny zapis zapisu nie będzie większy niż 1000 rekordów odczytywanych z odczytu danego rekordu (mogę dostroić tę wartość).CreateFileMapping, MapViewOfFile, jak uniknąć trzymania pamięci systemowej
Mam dwie oczywiste opcje tego procesu: regularne operacje we/wy (FileRead, FileWrite) i mapowanie pamięci (CreateFileMapping, MapViewOfFile). Te ostatnie powinny być znacznie wydajniejsze w systemach z wystarczającą pamięcią, ale w systemach z małą pamięcią wymienią większość pamięci innych aplikacji, co w mojej aplikacji jest nie-nie. Czy istnieje sposób na powstrzymanie procesu od zjedzenia całej pamięci (np. Jak zmuszenie do przepłukiwania stron pamięci, do których nie mam dostępu)? Jeśli nie jest to możliwe, muszę odwołać się do zwykłego wejścia/wyjścia; Chciałbym użyć nakładających się we/wy dla części do pisania (ponieważ dostęp jest tak losowy), ale dokumentacja mówi: writes of less than 64K are always served synchronously.
Wszelkie pomysły na ulepszenie operacji wejścia/wyjścia są mile widziane.
Być może VirtualFree (MEM_DECOMMIT) może być pomocny? Nie znam tego. –
Nie, VirtualFree (MEM_DECOMMIT) kończy się niepowodzeniem dla FRP; Właśnie sprawdziłem. –