![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тормозит вся система при копировнаии файла
Mozart_mcs © (2006-03-16 10:29:00)Файл порядка 300 мег, копируется по сети, при этом данный компьютер использовать во время копирования невозможно... Все тормозит,... Комп не слабый... Думаю, что все дело в неправильном моем подходе.. Как например можно уменьшить отжираемые ресурсы для процедуры CopyFile()? Что еще не так?
try
application.ProcessMessages;
CopyFile(PChar(N1),PChar(N2),False);
finally
Form1.Memo2.Lines.Add('temp copied, from '+N1+' to '+N2+' '+DateTimeToStr(Now));
end;
Чапаев (2006-03-16 17:04:00) [1]
> т.е. - на отдельной сетевухе таких трабл. не будет?
Смотря на какой... Прицепишь Финкель -- будет тебе щастье. Суреком (или вон товарищи ещё Реалтек упоминают) прицепишь -- будет тебе нещастье...
Styx_ (2006-03-16 16:40:00) [2]А вообще стоит посмотреть в Process Explorer, кто занимает процессорное время. Тогда многое станет на место. Я так вывел на чистую воду Realtekовскую сетевуху, которая жрала процессорное время - не интегрированная, кстати. Только Process Explorer надо не из самых давних - чтобы Interrupts, DPCs и т.п. ерунду показывал.
Black Krok (2006-03-16 16:20:00) [3]2 Fay © (16.03.06 13:46) [15]
Mozart_mcs это удалось. Для него и писал.
Fay (2006-03-16 13:46:00) [4]2 Black Krok © (16.03.06 13:21) [14]
Мне не удалось добиться "система задумывается совсем глубоко". Никак.
Black Krok (2006-03-16 13:21:00) [5]>А если нет?
Написал "может", "не проверял". Что еще? Если Вы проверяли, и система задумывается совсем глубоко - так и напишите.
Fay (2006-03-16 13:16:00) [6]> имеет более низкий приоритет
Какой "более низкий" ?
> Если ... имеет
А если нет?
Black Krok (2006-03-16 13:08:00) [7]2 Fay © (16.03.06 12:53) [11]
Читал. Если Вы в смысле, что на прорисовку летающих страничек тоже расходуется какой-то % процессорного времени, то, конечно,это так.
Однако, задача стояла не УСКОРИТЬ процесс копирования, а сделать его менее напряжным для машины. Если SHFileOperation() имеет более низкий приоритет, задача решена.
Fay (2006-03-16 12:53:00) [8]2 Black Krok © (16.03.06 12:50) [10]
Вы сами читали свой ответ?
Black Krok (2006-03-16 12:50:00) [9]2 Fay
Временным. В смысле, приоритет имеет меньший. Не проверял, но большие файлы копирую именно так. Именно из-за красивости
Fay (2006-03-16 12:48:00) [10]2 Black Krok © (16.03.06 12:35) [8]
К каким ещё "ресурсам"?
Black Krok (2006-03-16 12:35:00) [11]Может, SHFileOperation() бережнее отнесется к ресурсам? Опять же красивше :)
Anatoly Podgoretsky (2006-03-16 12:31:00) [12]Это абстрактные слова
Mozart_mcs (2006-03-16 12:24:00) [13]Да кстати - сетевухи все отдельные оказались..
> А может и не так медленно?
Нет... это.. ужасно...
Anatoly Podgoretsky (2006-03-16 11:53:00) [14]А может и не так медленно?
Mozart_mcs (2006-03-16 11:40:00) [15]
> Такая фигня бывает, когда UDMA отваливается
вроде все ОК.
> такое поведение часто наблюдается на интегрированных сетевухах
т.е. - на отдельной сетевухе таких трабл. не будет?
(кстати вообще - может для серваков есть смысл в отдельных сетевухах, чтобы уменьшить степень тормозов?)
> Думаю, следует отказаться от CopyFile() в пользу циклического
> поблочного копирования средствами, например, TFileStream
> с вызовом Application.ProcessMessages в каждой итерации
Ок, я попробую, спасибо..
Desdechado (2006-03-16 11:03:00) [16]такое поведение часто наблюдается на интегрированных сетевухах
Сергей М. (2006-03-16 10:58:00) [17]
> Как например можно уменьшить отжираемые ресурсы для процедуры
> CopyFile()?
Копирование файла "в один прием" - высокоприоритетная операция.
Думаю, следует отказаться от CopyFile() в пользу циклического поблочного копирования средствами, например, TFileStream с вызовом Application.ProcessMessages в каждой итерации (если копирование осуществляется в контексте осн.потока VCL-приложения).
Понижение же приоритета потока, копирующего файл средствами CopyFile(), практически не даст результата.
Fay (2006-03-16 10:42:00) [18]Такая фигня бывает, когда UDMA отваливается. Проверь контроллеры ж.дисков в диспетчере устройств.