![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подвисание при работе с большим динамическим массивом байтов [WinXP]
Alik © (2010-10-15 00:17:00)Добрый день,
Имеется массив -
RawData: array of Byte;
DataLen := 4708000;
SetLength(RawData, DataLen)
Размер массива составляет порядка 4.5 Мегабайт.
Необходимо максимально быстро вырезать определенные куски в данном массиве, так как это делается например в функции Delete(S, Index, Count);
Пробовал так
for i := Index to DataLen - Count - 1 do
RawData[i] := RawData[i+Count];
Это работает, но тормозит очень сильно (порядка 30 секунд).
Можно ли как то ускорить эту процедуру средствами API или через Assembler?
DVM (2010-10-15 10:47:00) [21]
> Пробовал так
> for i := Index to DataLen - Count - 1 do
> RawData[i] := RawData[i+Count];
Move не спасет отца русской демократии?
RWolf (2010-10-15 09:43:00) [22]
> Это работает, но тормозит очень сильно (порядка 30 секунд).
Бред. Вышеприведённый код выполняется мгновенно.
Anatoly Podgoretsky (2010-10-15 04:16:00) [23]Не надо делать это побайтно.
Германн (2010-10-15 03:29:00) [24]
> Rouse_ © (15.10.10 01:10) [1]
В приведенном обрывке кода вроде никаких реаллоков нет. Возможно они подразумеваются, но ...
Rouse_ (2010-10-15 01:10:00) [25]Можно, не обязательно грохать сами данные нарываясь на реаллоки, достаточно работать с записями через промежуточный список с указателями на записи из которого исключать не валидные записи. Ну а сам реаллок делать после полной процедуры удаления.