Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Сокровищница
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  13:04[Войти] | [Зарегистрироваться]

Обсуждение материала
TSharedSream — класс упрощающий работу с файлом подкачки
Полный текст материала


Другие публикации автора: Алексей Румянцев

Цитата или краткий комментарий:

«... Реализует и упрощает процесс создания и работу с файлом подкачки. Расширяет возможности работы с объектом отображения данных. Может рассматриваться как альтернатива TFileStream, TMemoryStream. ...»


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.

Результаты голосования
Оценка содержания

  Содержит полезные и(или) интересные сведения
[1]1694.1%
 
  Ничего особенно нового и интересного
[2]00%
 
  Написано неверно (обязательно укажите почему)
[3]15.9%
 
Всего проголосовали: 17

Оценка стиля изложения

  Все понятно, материал читается легко
[1]1493.3%
 
  Есть неясности в изложении
[2]16.7%
 
  Непонятно написано, трудно читается
[3]00%
 
Всего проголосовали: 15




Смотрите также материалы по темам:
[TStream] [TMemoryStream] [TFileStream] [TMemo] [Exception] [Функции для работы с файлами ] [Файл подкачки] [Маппированные файлы]

Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 10

17-04-2003 14:43
Для тех кто использовал TRySharedStream в своих программах:
Имя TRySharedStream было изменено на TRySwapStream имя соответствующего юнита также было изменено с SharedStream на SwapStream, извините за неудобство.

To moniker:
Надо было сделать оговорочку что это не касается TRySwapStream, т.к. он не создает новых файлов.


17-04-2003 14:22
Не пугайтесь большого размера архива, на самом деле он маленький, просто, скорей всего, Экзешник попался или временный файл. Елена удалите его, пожалуйста, из архива.


05-09-2002 16:29
New File Created with CreateFileMapping() Returns ERROR_LOCK_VIOLATION


http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com/support/kb/articles/Q266/7/49.ASP


02-10-2001 15:07
А вот и свежий прикол на тему file mapping under win98. Функция FlushViewOfFile под win98 реально ничего НЕ делает. Данные кешируются, но на диск в тот же момент не попадают.

РЕШЕНИЕ: Вызвать FlushFileBuffers, передать ей хэндл файла, полученный с помощью CreateFile, тот самый, который использовался в вызове CreateFileMapping.

Да, определенно, на реализации file mapping"a под win98 разработчики Microsoft отдохнули :)


23-09-2001 23:43
Сорри, не подписался :)


23-09-2001 23:34
File mapping - один из любимых моих коньков. Поэтому добавлю кое-что от себя :)

Реализация API file mapping кардинально различается для Win9x и WinNT/2000/XP. Впрочем, если автор сказал, что под 95/98 все работает хорошо, это фактически означает, что под NT-системами все будет просто великолепно. Однако это касается только данного конкретного случая, да и то наверняка не все варианты были протестированы.

Наученный самым горьким опытом (продукт, построенный целиком на file mapping"e и писавшийся под Win2000, за несколько дней до выпуска беты фактически перестал работать под Win98), могу сразу дать жизненно важный для работы file mapping"a совет :) Под Win9x всегда нужно создавать именованные объекты проецирования, т.е. в функцию CreateFileMapping передавать непустое (!) имя. Само имя не важно, можно его генерировать случайным образом, важен сам факт его присутствия. При этом работа ядра с именованными и неименованными объектами осуществляется совершенно по разному (какой синюга это писал, можно только догадываться :)

Алексей предлагает делать такой поток на основе файла подкачки. При этом для изменения размера объекта проецирования без потери данных приходится полностью их дублировать. При больших размерах потока это может быть накладно. Как вариант, можно создавать проецирование на основе временного файла, а не на основе памяти (т.е. файла подкачки). По сути этот временный файл будет мало чем отличаться от файла подкачки системы. При этом при пересоздании объекта проецирования с новым размером нам не нужно копировать данные, они останутся в файле. Мы экономим память в два раза.

Кто-то скажет, что такой вариант будет значительно медленнее за счет дисковых операций. Это вопрос очень тонкий и вот что на него может повлиять:
1. За счет кеширования дисковых операций вероятность того, что данные будут немедленно сброшены на диск при пересоздании проецирования весьма мала. Скорее всего, этот процесс пройдет как обычная операция с памятью.
2. При значительных размерах потока даже первоначальный вариант может требовать своппинга страниц в/из файла подкачки.
3. Создание второго объекта проецирования такого же размера с большой вероятностью приведет к свопингу страниц памяти системы в файл подкачки с целью освободить физическую память для нового объекта. А это уже очень длительный процесс.

Как видим, вариант на основе временного файла может оказаться даже быстрее :) Это конечно сильно зависит от условий применения. Для такого потока также была бы очень полезной возможность проецировать не весь объект сразу, а лишь окно определенного размера (MapViewOfFile), что значительно снизило бы потребности в памяти.

Вообще же file mapping - очень интересная технология. У нее есть масса самых разнообразных применений. Особенно рекомендую ее тем, кто всерьез работает с файлами или кому необходим высокоскоростной обмен данными между процессами.
Сообщение не подписано


11-09-2001 15:24
Вообщем-то то, что M$ ввела саму возможность ошибки - показывается, что такая ситуация возможна (вы сами это признаете, т.к. обработку этой ошибки делаете... ;-). Что касается конкректного случая, то если я правильно думаю и ошибка там возникает из-за невозможности выделить регион виртуальных адресов, то 500 Мб маловато... Я вечером глчну в рихтора, скажу точнее, возможно попробую реализовать что бы ошибка возникала именно здесь.
Кроме того - передача nil в UnmapViewOfFile возможна после exception при создании объекта отображения - раз конструктор не отработал будет вызван деструктор, а там и UnmapViewOfFile стоит.


10-09-2001 15:35
Уважаемый Дмитрий.

Если Вас не затруднит поясните, пожалуйста, следующий момент :
>1) в методе Create, строка:
>FMemory := MapViewOfFile(SHandle, FILE_MAP_WRITE, 0, 0, Sz);
>вообзем-то понятно, что может произойти ощибка, например нехватит
>виртуальных адресов, если попытка выделить слишком большой кусок,
>а программа как раз всю память сразу делает отображенной.
Покажите, пожалуйста, пример возникновения этой ошибки. Я даже не видел ни разу развития такой ситуации.
Я выделял 100, 500M, но все было без ошибок.


10-09-2001 11:58
Как минимум имеется два ляпа, в принципе не приводящих к фатальным последствиям, но...
1) в методе Create, строка:
FMemory := MapViewOfFile(SHandle, FILE_MAP_WRITE, 0, 0, Sz);

вообзем-то понятно, что может произойти ощибка, например нехватит виртуальных адресов, если попытка выделить слишком большой кусок, а программа как раз всю память сразу делает отображенной. В случае ошибки вызывается исключение, при этом дальнейший код не выполняется, а именно строка:
CloseHandle(SHandle); - т.е. происходит утечка ресурсов, хоть и до конца жизни процесса.

2) Второй ляп вытекает из первого - если создать TSharedStream не удалось, то вызывается деструктор со строкой:
UnmapViewOfFile(FMemory); при этом, если события разворачивались по последнему сценарию или exception произошел раниьше, при создании объекта отображения, то FMemoty будет = nil, к exception это не приведет, но все таки такое оставлять не стоит...


07-09-2001 16:48
Могу предложить свой вариант TSharedSream. Как мне кажется, более функциональный.


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Какой месяц идет после марта?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.

Оценка содержания
 
Содержит полезные и(или) интересные сведения
 
Ничего особенно нового и интересного
 
Написано неверно (обязательно укажите почему)


Оценка стиля изложения
 
Все понятно, материал читается легко
 
Есть неясности в изложении
 
Непонятно написано, трудно читается

Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования