Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
ВнизБольшие массивы Найти похожие ветки
← →
Sung (2005-12-07 09:42) [0]Коротко о проблеме. Есть программа, которая собирает информацию, заносит в динамические массивы, обрабатывает ее и выдает результат.
Проблема в том, что иногда информации так много, что не хватает памяти. Если подскажете, как можно решить эту проблему, буду очень благодарен. :)
← →
Sergey13 © (2005-12-07 10:20) [1]>Есть программа, которая собирает информацию
Откуда?
Может БД прикрутить?
← →
evvcom © (2005-12-07 10:20) [2]А что можно подсказать, если о задаче ни слова. Ну скидывай обработанную информацию в файлы на диск. Та же винда и та использует файл подкачки. Word при открытии даже самого маленького файлика создает на диске временный файл.
← →
umbra © (2005-12-07 10:20) [3]Есть два способа:
1) Добавить памяти на комптьютер.
2) Периодически освобождать память, выделенную программе.
← →
evvcom © (2005-12-07 10:27) [4]
> 1) Добавить памяти на комптьютер.
Вероятно, что этого будет недостаточно. Надо будет еще сменить ОС на ту, у которой ограничение на 2 (3, 4) ГБ на приложение снято.
← →
Anatoly Podgoretsky © (2005-12-07 10:58) [5]Sung (07.12.05 09:42)
Вероятно памяти более чем достаточно, просто ты с ней наплевательски работаешь. Меняй алгоритмы.
← →
Sung (2005-12-07 11:16) [6]Чуть подробнее о программе. Есть множество файлов Excel. Программа через компонент FlexCel считывает данные из этих файлов в динамические массивы, сортирует, выполняет определенные вычисления, и результат заносит в другие файлы Excel.
Это программу писал я относительно давно. В последнее время данных стало гораздо больше. Поэтому программа уже не справляется. Ошибка возникает в момент выделения памяти под динамический массив.
Советы, связанные с добавлением памяти и переустановкой системы, в моей ситуации неосуществимы. Программа стоит на нескольких машинах.
По поводу алгоритма. Согласен, кривой. Поэтому и спрашиваю у вас совета, как поменять его малой кровью.
Про БД. Совет хороший. Я тоже об этом думал. Но придется переписывать весь код.
Про сохранение на диск. Можно подробнее? Есть ли какие-то механизмы автоматического сохранения информации при нехватке памяти и извлечения в случае необходимости?
← →
umbra © (2005-12-07 11:36) [7]
> Согласен, кривой. Поэтому и спрашиваю у вас совета, как
> поменять его малой кровью.
чтобы посоветовать, как поменять алгоритм, надо его по крайней мере узнать
← →
Sung (2005-12-07 12:12) [8]Упрощенно алгоритм выглядит следующим образом
var
i, j, N: Integer;
Arr: array of Integer;
....
N:=0;
for i:=1 to Count do//Количество файлов
begin
Flex.OpenFile(ExcelFile[i]); //открыть файл Excel
for j:=1 to Flex.MaxRow do //Смотрим все строки в файле Excel
begin
inc(N);
SetLength(Arr, N+1);
Arr[N]:=Flex.CellValue[j,1];
end;
Flex.CloseFile;
end;
← →
Sergey13 © (2005-12-07 12:29) [9]2[6] Sung (07.12.05 11:16)
>Про БД. Совет хороший. Я тоже об этом думал. Но придется переписывать весь код.
Наверное настала пора думать более предметно и начинать, подумавши, потихоньку переписывать
← →
alex_*** © (2005-12-07 12:37) [10]пиши данные в Access, обрабатывай там и выкидывай в другой excel.
Все строки ты смотришь - это 65k перебираешь? Лихо. Может хотя бы смотреть что подряд встретилось x пустых строк, то дальше не смотреть?
Поодиночке файлы нельзя обрабатывать?
← →
Sung (2005-12-07 12:40) [11]alex, я написал упрощенную схему. На самом деле у меня более сложные типы, всевозможные проверки и т.д.
Перебираю я не все строки, конечно. MaxRow содержит не 65k, у самую нижнюю строку, в которой было изменение.
← →
Sung (2005-12-07 12:42) [12]Поодиночке файлы тоже нельзя. Поэтому память освободить не удается.
← →
alex_*** © (2005-12-07 13:03) [13]а толку тогда от этой упрощенной схемы. Все равно не видно что происходит. Тогда на БД переделывай
← →
Sapersky (2005-12-07 14:24) [14]SetLength(Arr, N+1);
Не надо перевыделять память по одному элементу. Нужно или сначала посчитать, сколько надо, выделить, заполнить, или перевыделять блоками.
Хотя это совет скорее для повышения производительности, но и избавлению от глюков он тоже способствует.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c