Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Tmemorystream и ошибка Out of memory 
:(
    Опции темы
andrewr
Дата 30.1.2010, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 16.2.2006

Репутация: нет
Всего: нет



Есть 2 Tmemorystream и в каждый надо загрузить файл по 300 мб, первый загружаю, на втором у меня вылетает ошыбка: Out of memory :-( Помогите пожалуста :-( 

Это сообщение отредактировал(а) andrewr - 30.1.2010, 21:21
PM MAIL   Вверх
kami
Дата 30.1.2010, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Почему не воспользоваться TFileStream?
Вообще, 600 Мб  - не предел для программы. Сейчас загрузил 2 файла по 330 (примерно) мегабайт - никаких проблем, кроме роста занятой памяти.
Короче говоря - код в студию smile

Это сообщение отредактировал(а) kami - 30.1.2010, 21:46
PM MAIL WWW   Вверх
DarkProg
Дата 30.1.2010, 22:00 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Цитата(andrewr @  30.1.2010,  21:19 Найти цитируемый пост)
Есть 2 Tmemorystream и в каждый надо загрузить файл по 300 мб, первый загружаю, на втором у меня вылетает ошыбка: Out of memory :-( Помогите пожалуста


А ОЗУ хоть хватает куда загружать???

Хотя судя по всему, Ошибка в 17-ой строке.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
kami
Дата 30.1.2010, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(DarkProg @  30.1.2010,  22:00 Найти цитируемый пост)
А ОЗУ хоть хватает куда загружать???

ОЗУ тут ни при чем. Если оперативки не хватит - излишки будут сброшены в своп. Проблемы могут возникнуть только, если своп отключен или ему вручную задан слишком маленький размер.
PM MAIL WWW   Вверх
Matematik
Дата 31.1.2010, 00:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Кроме этого программа загружает другие большие данные в память?
Просто есть такая вещь как дефрагментация памяти и при определенных условиях может случиться, что  свободной памяти много, но нет непрерывного свободного куска размером 300МБ.

А так
Цитата(DarkProg @  30.1.2010,  22:00 Найти цитируемый пост)
Ошибка в 17-ой строке. 


PM MAIL WWW ICQ   Вверх
andrewr
Дата 31.1.2010, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 16.2.2006

Репутация: нет
Всего: нет



Код как таковой дать не могу smile Есть файл 300 мб он криптированый - криптированый smile Я загружаю файл с стреам и передаю стрим в функцию которая раскриптовывает по блоку и записывает в выходной стрим который при ините равен 0, и со временем возврастает до 300 мб. Рамы на компе 3гб и свап 3гб. Еще прикол в том что оно работало несколько дней, и сегодня вдруг начала ошыбка выскакывать :( 

код приблизительно такой:

Код

var
  in_file, out_file:tmemorystream;
  b:byte;
///
in_file:=tmemorystream.create;
out_file:=tmemorystream.create;
in_file.loadfromfile('c:\test_in.bin');
in_file.position:=0;

//
while in_file.position<in_file.size do
begin
in_file.read(b,1);
b:=b xor $11;
out_file.write(b,1);
end;

//
out_file.savetofile('c:\test_out.bin');
in_file.free;
out_file.free;


во время цыкла вылетает ошыбка - когда уже размер програмы в раме доходит до 512-514 мб(как когда).
PM MAIL   Вверх
kami
Дата 31.1.2010, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Повторю вопрос - 
Цитата(kami @  30.1.2010,  21:43 Найти цитируемый пост)
Почему не воспользоваться TFileStream?

Тем более, что ничего специфического для TMemoryStream не используется.
PM MAIL WWW   Вверх
CodeMonkey
Дата 31.1.2010, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Так не загружайте файл целиком-то!
Обрабатывайте его кусками по 10 Мб.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Matematik
Дата 31.1.2010, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



andrewr
Цитата(andrewr @  31.1.2010,  00:38 Найти цитируемый пост)
Рамы на компе 3гб и свап 3гб.

В обычных условиях одной программе доступно только 2ГБ.

Возьми последнюю версию FastMM http://sourceforge.net/projects/fastmm/
Подключи к проекту FastMM4.pas первым модулем, так
Код

program Project1;

uses
  FastMM4,
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;


включи в свойствах проекта отладочную версию Build Configuration = Debug
в папку с *.exe положи FastMM_FullDebugMode.dll
откомпилируй свою программу, запусти чтоб ошибка появлялась
и если были утечки памяти, после закрытия программа выдаст окошко с соответствующим сообщением и в файл имяпрограммы_MemoryManager_EventLog.txt сохраниться подробный отчет где\что "подтекает"

Плюс посмотри в папке demo есть пример Usage Tracker, он показывает состояние памяти программы, может действительно её не хватает.



Это сообщение отредактировал(а) Matematik - 31.1.2010, 22:32
PM MAIL WWW ICQ   Вверх
Лапоть
Дата 2.2.2010, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 3.4.2009

Репутация: нет
Всего: 2



А зачем открывать ВТОРОЙ поток? Считал в первый и юзай его свойство Memory для побайтового декриптования, а потом сохрани в файл под нужным именем.
PM MAIL   Вверх
artsb
Дата 2.2.2010, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 6
Всего: 64



Цитата(kami @  31.1.2010,  01:15 Найти цитируемый пост)
Повторю вопрос - 
Цитата(kami @  30.1.2010,  21:43 Найти цитируемый пост)
Почему не воспользоваться TFileStream?

Тем более, что ничего специфического для TMemoryStream не используется. 


Согласен с kami. Зачем юзать TMemoryStream, если можно использовать TFileStream. Конечно будет работать немного медленнее, но так хотя бы можно проверить была ли проблема в оперативке.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Mikel
Дата 3.2.2010, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

Репутация: 1
Всего: 2



Еще придирки принимаются? smile я бы написал все же:
Код

while in_file.read(b,1)=1 do
begin
b:=b xor $11;
out_file.write(b,1);
end;



--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
andrewr
Дата 3.2.2010, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 16.2.2006

Репутация: нет
Всего: нет



Сделал Tfilestreamб проблема решилась smile Всем спасибо smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0839 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.