powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CreateFile создает mapped-file, даже если его не просишь.
24 сообщений из 24, страница 1 из 1
CreateFile создает mapped-file, даже если его не просишь.
    #40110616
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дня доброго.
Есть достаточно простой код, который создает гиговый файл со случайными байтами.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
function _GetErrorMsg(ecode: Cardinal): string;
var
  Buf: array [0 .. 1024] of char;
begin
  SetString(Result, Buf, FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, ecode, 0, @Buf, sizeOf(Buf), nil));
  Result := StringReplace(Result, #13#10, '', [rfReplaceAll]);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  filename: String;
  hfile: THandle;
  buffer: TBytes;
  i: integer;
  blocksize: integer;
  bytesWritten: Cardinal;
  res: Boolean;
begin
  filename := 'D:\PR\de\data.txt';
  hfile := CreateFile(pchar(filename), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_FLAG_WRITE_THROUGH, 0);
  if hfile = INVALID_HANDLE_VALUE then
  begin
    ShowMessage(_GetErrorMsg(GetLastError));
    exit;
  end;
  blocksize := 32000;
  Randomize;
  SetLength(buffer, blocksize);
  for i := 1 to blocksize do
  begin
    buffer[i - 1] := Random(100) + 100;
  end;
  for i := 1 to 40000 do
  begin
    res := WriteFile(hfile, buffer[0], blocksize, bytesWritten, nil);
    if res = false then
    begin
      ShowMessage(_GetErrorMsg(GetLastError));
      exit;
    end;
  end;
  FlushFileBuffers(hfile);
  CloseHandle(hfile);
end;



По результату у нас в папке будет 1.2 Гб файл:
https://prnt.sc/1z03cz7

И этот же файл, за каким то фигом будет маппирован в память:
https://prnt.sc/1z03gho

Хотя этого я точно у системы не просил (нет никаких CreateMappedFile)
Как его сбросить из mapped?
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110621
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежов Дмитрий Сергеевич,

FILE_FLAG_WRITE_THROUGH делает это для кэширования. После закрытия файла там уже не должно его быть, наверно не успевает та твоя прога, которой ты смотришь, что файл есть.

Не знаю, зачем тебе понадобился этот флаг, если ты не хочешь кэширования в память файла. На просто судорожное использование флагов похоже.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110623
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

да, я уже многое судорожно подергивал. И без этого флага (который отменяет кеширование) - та же картина.
Пробовал, кстати, на разных компах, на десктопной и серверной виндах.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110637
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежов Дмитрий Сергеевич,

Просто передай в тот параметр FILE_ATTRIBUTE_NORMAL.
Если и это не поможет - забей. Либо та прога-монитор глючит, либо так и должно быть.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110643
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

"Просто передай в тот параметр FILE_ATTRIBUTE_NORMAL."
попробовал - тоже самое.

"прога - монитор глючит".
Это даже не смешно, это RamMap от Руссиновича.
https://docs.microsoft.com/en-us/sysinternals/downloads/rammap
Кому, как не ему, знать внутрянку Венды.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110647
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежов Дмитрий Сергеевич,

Не знаю, кто такой Руссинович, и не знаю, что там та прога показывать должна. Может, она должна показывать открытые в данный момент файлы.
Но если после CloseHandle она что-то показывает - то значит, что с этой прогой что-то не так. Может, конечно, винда кэширует открытые файлы, но очень сомневаюсь.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110655
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может его в это время антивирус шерстит?
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110666
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежов Дмитрий СергеевичИ этот же файл, за каким то фигом будет маппирован в память:

В каком месте этого скрина ты увидел "маппирован в память"? Может, стоит таки
разобраться что именно показывают утилиты от Руссиновича?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110674
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

примерно вот тут
https://prnt.sc/1z0gzrw
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110676
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Да и произвольный доступ на чтение блоками по 32 Кб дает скорость в 800 Мбайт/сек, при нулевой загрузке моего полудохлого 5400 винта, что как бэ говорит о чтении памяти.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110677
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но на самом деле вопрос снят

Сделал с комбинацией
FILE_FLAG_NO_BUFFERING or FILE_FLAG_WRITE_THROUGH и все взлетело.

Диск у меня с размером сектора в 512 байт, буфер будет кратен 512 (я взял 32768) и все у меня записалось.
Буфер выделял через getmem(), а не virtualalloc(), но ошибок не было, может там чето несогласованно записалось, но мне пофиг, мне нужен тупой большой файл на диске.

1С ники справились быстрее
https://forum.mista.ru/topic.php?id=873725
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110679
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежов Дмитрий Сергеевичпримерно вот тут

Поздравляю, ты нашёл системные буфера. Тебя беспокоит их существование?..

https://techcommunity.microsoft.com/t5/ask-the-performance-team/introduction-to-the-new-sysinternals-tool-rammap/ba-p/374717
Standby: Pages of physical ram not actively being used. These are still left in physical ram but will be repurposed first by the memory manager (either returned to the active list or zeroed out and reused) if something needs physical ram for active pages. Standby pages are essentially cache – it’s better to have infrequently used data kept in RAM “just in case” than pushing it out to disk when the memory isn’t needed for anything else.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110681
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

меня ничего не беспокоит. Я уже давно понял, что каши на этом форуме не сваришь.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110684
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежов Дмитрий СергеевичСделал с комбинацией FILE_FLAG_NO_BUFFERING or FILE_FLAG_WRITE_THROUGH и все
взлетело.

Поздравляю ещё раз, ты нашёл способ отключить системную буферизацию. Но стало ли
твоё поделие от этого работать лучше или ты просто его замедлил в восемь раз?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110688
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежов Дмитрий Сергеевичмне нужен тупой большой файл на диске.

Для этого в него вообще не обязательно что-либо писать, достаточно вызвать
SetFilePos + SetEndOfFile. Самый цимес будет если установить флаг "sparse".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110693
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Мне нужно оценивать произвольный доступ к диску для холодного файла.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110695
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не указывать FILE_FLAG_NO_BUFFERING - система проецирует файлы в память кусками mmf вроде по 256Kb. Может сейчас другие цифры. В подавляющем большинстве случаев это нормальная картина, которая никому не мешает жить.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110696
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А для этого вообще файл создавать не нужно, можно читать прямо физический диск.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110697
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежов Дмитрий Сергеевич
Dimitry Sibiryakov,

Мне нужно оценивать произвольный доступ к диску для холодного файла.
https://crystalmark.info/en/software/crystaldiskmark
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110698
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

А для этого вообще файл создавать не нужно, можно читать прямо физический диск.
Админские права вроде нужны.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110708
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57,
"https://crystalmark.info/en/software/crystaldiskmark"
Я ее прекрасно знаю, с ней и сравниваю свои результаты.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110709
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

"А для этого вообще файл создавать не нужно, можно читать прямо физический диск."

Запороть по ошибке что нибудь на жестком диске? Да еще у клиентов. Спасибо, не надо.
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110712
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запороть что-то чтением? Для этого нужно быть особо выдающимся программистом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateFile создает mapped-file, даже если его не просишь.
    #40110751
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

да, вы правы, только чтением ничего не запоришь.
Изначально я подумывал, что буду писать в свободные сектора диска и их же читать и испугался, что запишу не в свободные.
А просто читать произвольные сектора - это доступ к данным, которые мне нельзя читать просто потому, что это не мои данные, да и, уверен, Windows не позволит без полных прав.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CreateFile создает mapped-file, даже если его не просишь.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]