Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Out of memory


pirate ©   (2006-05-06 16:36:00) 

Здраствуйте, уважаемые!
Суть проблемы такова:
есть типы:


type TWord=record
wrd:shortString;
descr:AnsiString
end;

type TDict=record
count:longint;
words:array of TWord;
end;

var Dahl:TDict;

.......
в цикле происходит следующее:
Dahl.count:=Dahl.count+1;
         SetLength(Dahl.words,Dahl.count);
         Dahl.words[Dahl.count-1].wrd:=s2;
         Dahl.words[Dahl.count-1].descr:=s3;

.......

Что я хотел сделать:
Я хотел загрузить толковый словарь Даля в переменную Dahl из файла, представляющую собой динамический массив.

.wrd- это само слово
.descr- это его смысловое значение (следует отметить, весьма объемное, иногда достигает ~500 байт)

По обработке ~8400 слов выдается "Access denied...***###$%...Out of memory...&%**&(("

Вот так вот.


TUser   (2006-05-08 12:15:00) [1]

Все равно в памяти это хранить не нужно.


pirate   (2006-05-06 17:09:00) [2]


> вряд ли оно уместится

16.5 MB в текстовом файле.. Вот оно как.

> заполнить массив "Слов" и смещений соответствующей "Статьи"
> в файле, и подчитывать статью динамически

- а это ты тему подсказал! Решение достойное профессионала!
Спасибо!


han_malign   (2006-05-06 17:09:00) [3]


> Далев "словобукварь" - серьезное и весьма информационноемкое творение.

http://lib.km.ru/?id=2871
~18Мб
- не вопрос


han_malign   (2006-05-06 16:58:00) [4]

убери shortString - поднимешь количество раза в 2/3, за счет уменьшения фрагментации...

Но, самое простое, с минимальной фрагментацией - загрузить файл целиком в память(если влезет), проставить #0 в конце "Статей", и заполнить массив PChar-ов (размер которого узнали на этапе проставления нулей)(если хватило места под него) указателями на начало "Слов"... Слова от Статей отделять динамически(для уменьшения использования памяти)...

А лучше, все таки, заполнить массив "Слов" и смещений соответствующей "Статьи" в файле, и подчитывать статью динамически(500 мс максимум - если винчестер подыхает)...


Сергей М.   (2006-05-06 16:40:00) [5]


> хотел загрузить толковый словарь Даля


Серьезная заява)

А нафига ?
Можно поинтересоваться ?
Далев "словобукварь" - серьезное и весьма информационноемкое творение. вряд ли оно уместится в  два далеко не полных Гб, отведенных для твоего программного творчества под Win32 ..


Наверх

Титульная страница Поиск, карта сайта Написать письмо