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

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

Тормозит вся система при копировнаии файла


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 отваливается. Проверь контроллеры ж.дисков в диспетчере устройств.


Наверх

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