Создание файла в оперативной памяти. Реально ли?

Тема в разделе "WASM.WIN32", создана пользователем dyn, 10 фев 2011.

  1. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Есть чужой исходник.
    В нем активно используются для различных нужд несколько временных файлов, которые создаются в темп-директории.
    После завершения программы эти файлы удаляются.
    Временные файлы большие, примерно по гигабайту размером. Туда постоянно что-то пишется, читается и т.д.
    Т.к. они находятся на HDD, работа с ними довольно-медленно происходит.

    Скажите, реально ли сделать так, чтобы вместо hFile = CreateFileA(...) создать объект в оперативной памяти, с которым можно было бы работать так же, как и с обычным файлом, в плане пользоваться функциями (SetFilePointer, ReadFile, WriteFile, GetFileSize, SetEndOfFile и т.д.) ?

    Сейчас у меня идея просто переписать сорс, чтобы вместо файлов просто создать гигабайтные буфферы и пользовать их. Но сорс большой и затраты времени тоже будут большие на переделку и разглючивание.
     
  2. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    ramdrive
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    dyn
    Может с CreateFileMapping() быстрее?
     
  4. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    fsd
    Требуется без драйвера, своими силами и со своего кода.

    _sheva740
    Мэппинг и так используется.
    Но все-таки произвольный доступ к оперативной памяти в тысячи раз быстрее, чем к файлу на винте.
    Хочется чтобы объект был на на винте, а в оперативной памяти и с этим объектом можно было бы работать как с файлом через хендл.

    На васме год назад кажется поднималась подобная тема, но сейчас я ее что-то найти не могу.
     
  5. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    иначе не выйдет
     
  6. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Нужно чтобы вышло.
    В проекте около 150 тыс. строк кода.
    Одно дело написать костыли, которые позволят в разы увеличить производительность, а другое - все это дело переписывать и дебажить.
     
  7. rmka

    rmka Member

    Публикаций:
    0
    Регистрация:
    22 окт 2010
    Сообщения:
    108
  8. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    ramdrive самое простое что можно придумать
    при чем тут какие-то строки неясно =\
     
  9. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    fsd
    Объясняю.
    Проект - коммерческий.
    На продажу.
    Чтобы оно работало как надо, конечному пользователю прийдется устанавливать рамдрайв и настраивать.
    А это беда... Целевая аудитория - далеко не сисадмины. Каждая дополнительная манипуляция с программой со стороны пользователя сократит продажи вдвое. Нужно чтобы запустил и работало.
    В довесок, мне не нужны все возможности рамдрайва.
    В конечном счете я уже подумываю просто хукнуть нужные функции и в организовать все на свой лад в обработчиках.

    Теперь при чем тут строки.
    Проект до меня писали другие люди. Я даже по коду вижу где кто свою лепту внес.Суммарно насобиралось 150 тыс строк. Изменение, которое я хочу внести - глобальное, т.е. затрагивает весь проект. И я хочу внести изменения с минимальными затратами времени на его отладку.

    Все что я хочу - это чтобы вместо временных файлов использовалась оперативная память. При этом переделать код по минимуму.
     
  10. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    можно перехватить функции работы с файлом.
     
  11. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Ну это колхоз для такого проекта))
    Я чет туплю, но разве нельзя сделать CreateFileMapping именованую, а потом во всех твоих вызовах CreateFile подставить это имя.
    Только работа с памятью может оказаться еще медленнее. Потому что неск. буферов по гигабайту+часто обращение-будет часто сбрасываться в подкачку, а это та же работа с диском.
     
  12. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    onSide
    Вот тебе мегареспект!
    +100500
     
  13. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    dyn Так че работает? Просто никогда не видел чтобы к секциям обращались через ReadFile/WriteFile и хз как оно будет делать SetFilePointer,SetEndOfFile. Расскажи что получилось))
     
  14. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    вы знаете, в винде очень к многому можно применять CreateFile, ReadFile, WriteFile и тд)
     
  15. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Rel знаю)) Но мне кажется(а точно смотреть доки щас лень) что file pointer хранится в объекте ядра FILE, а секция это уже другой объект, поэтому я засомневался насчет этих ф-ций)
     
  16. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    А если в исходники простым пойском строк заменить ReadFile и др. на имя обработчика, который будет делать работу с памятью. хендаль файла будет указателем на кусок памяти, где храниться указатель на саму память, коретку чтения\записи. и кроме имён функций и маленьких функций обработчика ничего менять не надо.
     
  17. krabz

    krabz New Member

    Публикаций:
    0
    Регистрация:
    26 май 2010
    Сообщения:
    135
    тогда можно ещё проще:

    Код (Text):
    1. #undef CreateFile
    2. #define CreateFile MyCreateFile
    3. ... и т.д.
     
  18. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    krabz
    Ву. Классно!
     
  19. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    Их штуки 2-3? так и никакой памяти не хватит...
     
  20. sambd

    sambd New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2007
    Сообщения:
    60
    х64 и вперед с песнями