Страница 1 из 2
Опять объемы Blob-ов
Добавлено: 05 Июль 2011, 23:36
muskin
Приветствую всех!
Clarion 6.3 ABC
Чтобы долго не описывать свою проблему, сошлюсь на файл C:\Clarion6\Examples\Src\OLE\OLEDEMO2.PRJ
В качестве OLE-объекта выбираю Word.Document, в контейнер закачиваю вордовский файл объемом в 1MB, затем записываю в файл в Blob-поле.
Результирующий TPS-файл (SAVELINK.TPS) имеет уже объем в 3,17MB.
Ладно, думаю, мой исходный вордовский файл имеет кучу графики. Закачал простой текстовый файл в формате .DOC объемом в 36KB - на выходе (SAVELINK.TPS) 78KB.
Вопрос - откуда такое увеличение объемов?
Раньше задавал аналогичный вопрос по Image -> Blob. Сообщество вразумило меня тогда, может, сейчас подскажете?
Re: Опять объемы Blob-ов
Добавлено: 25 Июль 2011, 10:57
Yufil
У меня есть процедуры упаковки-распаковки блобов (через Zlib). Мож, пригодится...
Re: Опять объемы Blob-ов
Добавлено: 31 Июль 2011, 0:22
muskin
Спасибо за долгожданный ответ.
Если для Yufil-а не затруднительно, укажите источник или поделитесь знаниями.
Re: Опять объемы Blob-ов
Добавлено: 01 Август 2011, 11:58
Yufil
Да источник-то не секретен, совершенно открытая библиотека Zlib.
Эта библиотека среди прочих содержит процедуры работы с zip-файлами и упаковки строк в памяти.
Вот последним функционалом я и пользуюсь. Ещё, правда, предварительно нарезаю Blob на кусочки перед упаковкой и склеиваю после, но это вопрос вкуса (когда-то давно помогало экономить память и решало некоторые внутренние проблемы, но сейчас это совсем неважно).
Реально разрабатывал обучающие программы, где в базах было достаточно много плохоупаковываемых данных (формы экранов и тесты - XML, форматированные тексты - OLE, RTF и HML , картинки - BMP, WMF - ну и так далее...
Естественно, памяти жрало немеряно... Вот и написал пару процедур
PackBlob - упаковка Blob "на месте" и
UnpackBlob - распаковка Blob "на месте"
Подробности личной почтой
yufil@mail.ru ICQ 57824439
Re: Опять объемы Blob-ов
Добавлено: 01 Август 2011, 13:21
Губин Игорь
В восьмёрке это уже решается штатными средствами
Re: Опять объемы Blob-ов
Добавлено: 01 Август 2011, 21:37
muskin
А все-таки, ради интереса - почему при записи в Blob-поле объем того же Doc-файла увеличивается как минимум в два раза по отношению к его реальному объему?
Re: Опять объемы Blob-ов
Добавлено: 02 Август 2011, 5:35
Губин Игорь
Ты его КАК записываешь? Просто перегоняешь файл с диска в поле blob, или записываешь туда объект? Если просто файл с диска, то текст в студию, если объект, то уже отвечал.
Re: Опять объемы Blob-ов
Добавлено: 04 Август 2011, 2:18
muskin
Имено-так, контейнер для приема открыт (?OLEObject{PROP:DoVerb}=-2), открываю вторую копию Word-документа, из неё копирую в контейнер, затем записываю в Blob-поле. Вот и все.
Re: Опять объемы Blob-ов
Добавлено: 04 Август 2011, 7:30
Губин Игорь
Тогда я тебе уже писал. Ты загоняешь в блоб не текст документа, а контейнер с содержимым. Вот тебе и разница в объёмах.
Re: Опять объемы Blob-ов
Добавлено: 05 Август 2011, 2:27
muskin
Спасибо за ответ.
А что - если контейнер с содержимым, то это обязательное увеличение дискового пространства как минимум в два раза?
Куда теряются ресурсы, что - контейнер - это какая-то черная дыра?
Re: Опять объемы Blob-ов
Добавлено: 05 Август 2011, 9:46
Yufil
Ну, можно предположить, что файл при сохранении на диск некоторым образом пакуется. А контейнер в памяти-нет...
Re: Опять объемы Blob-ов
Добавлено: 05 Август 2011, 9:50
Губин Игорь
Юрий, святая правда.
Я тут долго писал то-же самое, а ты ухитрился сохранить пост раньше. Абыдно, ДА!
Re: Опять объемы Blob-ов
Добавлено: 10 Август 2011, 1:51
muskin
Все это хорошо, но в в моей программе, в поле-отчета-Blob записываются Doc-документы (это полноценные документы с многочисленными таблицами), а полей очень много.
Памяти жрут очень много.
- "А что скажет КУПЕЧЕСТВО, в лице нашего Пахомыча"?
Прошу прощения за фамильярность.
Re: Опять объемы Blob-ов
Добавлено: 10 Август 2011, 9:31
Губин Игорь
Сбрасывай блобы во временные файлы и пакуй именно их. Обратный процесс аналогичен - сбрасываешь блов в файл и уже его открываешь объектом
Re: Опять объемы Blob-ов
Добавлено: 10 Август 2011, 11:08
Yufil
А зачем? Есть процедуры, пакующие Blob прямо на месте с созданием "упакованного блоба"... Записал OLE в Blob и тут же запаковал. И наоборот - достал, распаковал, показал...