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

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

Подвисание при работе с большим динамическим массивом байтов [WinXP]


Страницы:   1 2

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]

Можно, не обязательно грохать сами данные нарываясь на реаллоки, достаточно работать с записями через промежуточный список с указателями на записи из которого исключать не валидные записи. Ну а сам реаллок делать после полной процедуры удаления.


Страницы:   1 2

Наверх

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