Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CreateFile создает mapped-file, даже если его не просишь. / 24 сообщений из 24, страница 1 из 1
10.11.2021, 12:03
    #40110616
Ежов Дмитрий Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CreateFile создает mapped-file, даже если его не просишь.
Дня доброго.
Есть достаточно простой код, который создает гиговый файл со случайными байтами.

Код: 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
10.11.2021, 12:14
    #40110621
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CreateFile создает mapped-file, даже если его не просишь.
Ежов Дмитрий Сергеевич,

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

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

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

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

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

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

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

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

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

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

Сделал с комбинацией
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
10.11.2021, 13:54
    #40110679
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CreateFile создает mapped-file, даже если его не просишь.
Ежов Дмитрий Сергеевичпримерно вот тут

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

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
10.11.2021, 14:01
    #40110681
Ежов Дмитрий Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CreateFile создает mapped-file, даже если его не просишь.
Dimitry Sibiryakov,

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

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

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

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

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

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

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

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

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


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