| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Tmemorystream и ошибка Out of memory |
| Автор: andrewr 30.1.2010, 21:19 |
| Есть 2 Tmemorystream и в каждый надо загрузить файл по 300 мб, первый загружаю, на втором у меня вылетает ошыбка: Out of memory :-( Помогите пожалуста :-( |
| Автор: kami 30.1.2010, 21:43 |
| Почему не воспользоваться TFileStream? Вообще, 600 Мб - не предел для программы. Сейчас загрузил 2 файла по 330 (примерно) мегабайт - никаких проблем, кроме роста занятой памяти. Короче говоря - код в студию |
| Автор: kami 30.1.2010, 22:03 |
ОЗУ тут ни при чем. Если оперативки не хватит - излишки будут сброшены в своп. Проблемы могут возникнуть только, если своп отключен или ему вручную задан слишком маленький размер. |
| Автор: Matematik 31.1.2010, 00:10 |
| Кроме этого программа загружает другие большие данные в память? Просто есть такая вещь как дефрагментация памяти и при определенных условиях может случиться, что свободной памяти много, но нет непрерывного свободного куска размером 300МБ. А так |
| Автор: andrewr 31.1.2010, 00:38 | ||
| Код как таковой дать не могу код приблизительно такой:
во время цыкла вылетает ошыбка - когда уже размер програмы в раме доходит до 512-514 мб(как когда). |
| Автор: kami 31.1.2010, 01:15 |
| Повторю вопрос - Тем более, что ничего специфического для TMemoryStream не используется. |
| Автор: CodeMonkey 31.1.2010, 10:28 |
| Так не загружайте файл целиком-то! Обрабатывайте его кусками по 10 Мб. |
| Автор: Matematik 31.1.2010, 13:10 | ||
| andrewr, В обычных условиях одной программе доступно только 2ГБ. Возьми последнюю версию FastMM http://sourceforge.net/projects/fastmm/ Подключи к проекту FastMM4.pas первым модулем, так
включи в свойствах проекта отладочную версию Build Configuration = Debug в папку с *.exe положи FastMM_FullDebugMode.dll откомпилируй свою программу, запусти чтоб ошибка появлялась и если были утечки памяти, после закрытия программа выдаст окошко с соответствующим сообщением и в файл имяпрограммы_MemoryManager_EventLog.txt сохраниться подробный отчет где\что "подтекает" Плюс посмотри в папке demo есть пример Usage Tracker, он показывает состояние памяти программы, может действительно её не хватает. |
| Автор: Лапоть 2.2.2010, 10:43 |
| А зачем открывать ВТОРОЙ поток? Считал в первый и юзай его свойство Memory для побайтового декриптования, а потом сохрани в файл под нужным именем. |
| Автор: artsb 2.2.2010, 11:00 | ||
Согласен с kami. Зачем юзать TMemoryStream, если можно использовать TFileStream. Конечно будет работать немного медленнее, но так хотя бы можно проверить была ли проблема в оперативке. |
| Автор: Mikel 3.2.2010, 12:08 | ||
Еще придирки принимаются?
|
| Автор: andrewr 3.2.2010, 20:59 |
| Сделал Tfilestreamб проблема решилась |