找回密码
 加入
搜索
查看: 2493|回复: 5

[效率算法] filemove占用cpu过高问题

  [复制链接]
发表于 2017-1-10 18:45:23 | 显示全部楼层 |阅读模式
我先获取文件列表,然后for循环 filemove 把文件一个一个移动到另一个路径下。 我发现单个文件超过700M 上G 的时候。程序就会(无响应)CPU占用到100. 一直到这个文件移动完成,  开始下一个的时候,又活过来。
发表于 2017-1-10 19:30:34 | 显示全部楼层
这个算不上算法吧?  folemove和你本地复制文件差不多,难道你实际操作的时候cpu占用不高?
个人觉得这个是机器配置问题
 楼主| 发表于 2017-1-14 09:12:21 | 显示全部楼层
回复 2# austere


    配置应该没问题 是在服务器上用的e5的cpu,应该和系统的复制不一样,我试试调用系统shell会不会占用没那么高
发表于 2017-1-14 22:57:38 | 显示全部楼层
上代码看下吧……  光描述看不出问题来
 楼主| 发表于 2017-1-15 01:07:10 | 显示全部楼层
回复 4# austere
                        For $i = 1 To $FileList[0]
                                For $s = 1 To $UpList[0]
                                        Dim $UpList2 = _Menu($UpList[$s])
                                        If _ArraySearch($UpList2,$FileList[$i]) <> -1 Then
                                                Dim $FileList2 = _Menu($File_Dir & "" & $FileList[$i])
                                                For $n = 1 To $FileList2[0]
                                                        _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[0]  - 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 。试试
发表于 2017-1-20 08:48:23 | 显示全部楼层
把A和B放在同一个盘符试一试。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-21 20:47 , Processed in 0.086250 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表