aryce 发表于 2017-1-10 18:45:23

filemove占用cpu过高问题

我先获取文件列表,然后for循环 filemove 把文件一个一个移动到另一个路径下。 我发现单个文件超过700M 上G 的时候。程序就会(无响应)CPU占用到100. 一直到这个文件移动完成,开始下一个的时候,又活过来。

austere 发表于 2017-1-10 19:30:34

这个算不上算法吧?folemove和你本地复制文件差不多,难道你实际操作的时候cpu占用不高?
个人觉得这个是机器配置问题

aryce 发表于 2017-1-14 09:12:21

回复 2# austere


    配置应该没问题 是在服务器上用的e5的cpu,应该和系统的复制不一样,我试试调用系统shell会不会占用没那么高

austere 发表于 2017-1-14 22:57:38

上代码看下吧……光描述看不出问题来

aryce 发表于 2017-1-15 01:07:10

回复 4# austere                         For $i = 1 To $FileList
                                For $s = 1 To $UpList
                                        Dim $UpList2 = _Menu($UpList[$s])
                                        If _ArraySearch($UpList2,$FileList[$i]) <> -1 Then
                                                Dim $FileList2 = _Menu($File_Dir & "\" & $FileList[$i])
                                                For $n = 1 To $FileList2
                                                        _GUICtrlEdit_AppendText($Edit,"移动 " & $FileList[$i] & " - "& $FileList2[$n])
                                                        FileWrite($log,$FileList[$i] & "-"& $FileList2[$n])
                                                        If FileMove($File_Dir & "\" & $FileList[$i] & "\" & $FileList2[$n],$UpList[$s] & "\" & $FileList[$i] & "\" & $FileList2[$n]) = 0 Then
                                                                _GUICtrlEdit_AppendText($Edit,"*未完成*" & @CRLF)
                                                                FileWrite($log,"【未完成】" & @CRLF)
                                                        Else
                                                                FileMove($File_Dir & "\" & $FileList[$i] & "\" & $FileList2[$n],$UpList[$s] & "\" & $FileList[$i] & "\" & $FileList2[$n])
                                                                Dim $sum = _Menu($UpList[$s] & "\" & $FileList[$i])
                                                                _GUICtrlEdit_AppendText($Edit," (总:" & $sum- 2 & ")" & @CRLF)
                                                                FileWrite($log," -> " & $UpList[$s] & "\" & $FileList[$i] & @CRLF)
                                                                $size2 = DirGetSize($File_Dir)
                                                                GUICtrlSetData($Progress1,StringFormat("%d",$size1 - $size2)/$size1*100)
                                                        EndIf
                                                Next
                                        EndIf
                                        DirRemove($File_Dir &"\"& $FileList[$i])
                                Next代码有点复杂,这是一部分 , 卡的应该就是ELSE后面,FileMove($File_Dir & "\" & $FileList[$i] & "\" & $FileList2[$n],$UpList[$s] & "\" & $FileList[$i] & "\" & $FileList2[$n]) 这一句,各种List[].是移动之前,对文件名和文件夹名字的处理,在另外的func里面完成的。
其实就是个简单的 FileMove(“A”,“B”)而已。 意思就是用filemove 移动超过700M左右的文件,会卡死。对了,是有UI的。我写个简单点的 ,你试试吧。#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("窗体1", 238, 307, 314, 226)
$Button1 = GUICtrlCreateButton("FileMove", 48, 24, 153, 57)
$Group1 = GUICtrlCreateGroup("tips", 8, 112, 217, 185)
$Edit1 = GUICtrlCreateEdit("", 16, 136, 201, 153, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_HSCROLL))
GUICtrlSetData(-1, "Edit1")
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        _GUICtrlEdit_AppendText($Edit1,"正在移动...")
                        FileMove("d:\A.mp4","e:\A.mp4")
                        _GUICtrlEdit_AppendText($Edit1,"w完成")                       
        EndSwitch
WEnd
把 A路径 换成一个上G 的大文件,至少7~800M 。试试

jsdn2000 发表于 2017-1-20 08:48:23

把A和B放在同一个盘符试一试。
页: [1]
查看完整版本: filemove占用cpu过高问题