Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.12.2012, 19:11
Pcrepair
 
Сообщения: n/a
По умолчанию Как сохранить закачанные HTML-страницы?

Добрый день. Есть следующая ситуация:
- загрузчик страниц(на базе TidHTTP и TThread) получает список УРЛ и начинает параллельную закачку страниц
- число закачек ограничено 10 (пока)
- закачка страниц происходит асинхронно, каждая в своем потоке, результат закачки переносится в поле типа property Html: string read FHtml write FHtml;

Код:
type
  TLoader = class(TThread)
  private
     FUrl:string;
     FHtml:string;
    { Private declarations }
  protected
    procedure Execute; override;
    function LoadHtmlPage(const Url:string):string;
  public
    property Url: string read FUrl write FUrl;
    property Html: string read FHtml write FHtml;
  end;

- методом CS, на текущий момент, данные передаются в МЕМО, просто для наглядности. и там накапливаются
--------------------------
Необходим накопитель со следующими параметрами:
- доступность из всех процедур. типа глобальная переменная
- два поля: одно для УРЛ, второе для кода HTML-страницы. может и три, третье - для хранения идентификатора, чтоб не было коллизий
- работающее по принципу стека(тогда третье поле не нужно)
- без использования записи на ЖД в файл. все должно хранится в ОЗУ
++++++++++++++++++++++++++++
Внимание! Вопрос:
на основе чего можно сделать такой накопитель:
- что то слепить из операторов и типов(Списки, строки и все такое). никто не знает ссылок на что то похожее?
- использовать компоненты из палитры, там много чего с DB в названии, но с этими компонентами не знаком совершенно, может кто подскажет, какой компонент подойдет для накопителя?
- использовать ИнтерБейс, или еще какую внешнюю БД. что крайне нежелательно, во всяком случае на текущем этапе.
Ответить с цитированием
  #2  
Старый 20.12.2012, 20:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,090
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Создать свой класс и хранить их в TObjectList.
Только помни, что памяти у тебя всего 2ГБ на весь процесс (если 32 бит).
Реально, я бы больше 0.5ГБ не рассчитывал. Если все твои страницы уложаться туда - хорошо.
Ответить с цитированием
  #3  
Старый 20.12.2012, 20:56
Pcrepair
 
Сообщения: n/a
По умолчанию

Цитата:
Сообщение от lmikle
Если все твои страницы уложаться туда - хорошо.
значит ли это если допустим загрузить 10 страниц общим весом 1 мб, то из ОЗУ программа может выжрать 1 гб? ну или там 100 мб, то ест несоизмеримо больше?
Ответить с цитированием
  #4  
Старый 20.12.2012, 21:23
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,090
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, насчет несоизмеримо, сомневаюсь. Но то, что тебе скорее всего придется хранить в ОЗУ чуть больше, это точно. Если у тебя 10 страниц, даже пусть по 1 МБ, то пофиг, решение вполне годится. Напрягаться надо будет, если общий объем загружаемых данных будет больше 0.5 ГБ (зависит от версии Delphi и от того, как ты будешь хранить это все - строкой или просто бинарными данными).
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:49.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025