1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

Hỏi đáp Cách tối ưu autoit khi chạy chương trình 24/24

Thảo luận trong 'Thảo luận chung - Hỏi đáp' bắt đầu bởi dangmymy, 4/4/16.

  1. dangmymy

    dangmymy Thành viên mới
    • 1/6

    Tham gia ngày:
    4/4/16
    Bài viết:
    3
    Đã được thích:
    0
    mình đang viết autoit chạy 24/24 thao tác lặp đi lặp lại bằng hàm
    while 1
    WEnd

    mà mình thấy nó càng chạy càng chậm sao ấy, mình muốn hỏi có cách nào tối ưu để auto chạy êm mãi không vậy

    Cảm ơn mọi người đã góp ý
     
  2. Giang

    Giang Thành viên mới
    • 3/6

    Tham gia ngày:
    11/1/16
    Bài viết:
    9
    Đã được thích:
    4
    Khả năng lặp lại nhiều nó ngốn ram :) cách tối ưu là làm quả ram 16 GB :D và thêm con CPU ngon nữa là được :3
     
  3. dangmymy

    dangmymy Thành viên mới
    • 1/6

    Tham gia ngày:
    4/4/16
    Bài viết:
    3
    Đã được thích:
    0
    hi cảm ơn bạn đã trả lời , mình biết thế nên thử hỏi xem có pro nào có cách nào khác hay k :D
     
  4. emga9xkc

    emga9xkc Thành viên năng động
    • 43/45

    Tham gia ngày:
    7/3/16
    Bài viết:
    232
    Đã được thích:
    205
    :v máy tính e chạy auto lol cả ngày cả đêm, máy kêu to kinh khủng
     
  5. Darias

    Darias Thành viên mới
    • 1/6

    Tham gia ngày:
    6/4/16
    Bài viết:
    6
    Đã được thích:
    0
    Chuyển đổi qua lại AutoIT/AHK hoặc dùng CommandLine để reset Auto để bớt ngốn ram.
    P/s: Có lẽ nguyên nhân ngốn ram là do chường trình đang thao tác auto (theo dõi hệ thống sẽ rõ). Nên reset lại chương trình đang auto.
     
  6. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    Reset lại là 1 gợi ý hay, bổ sung thêm giải phóng bộ nhớ theo 1 thời gian cố định nữa, ta được:

    OnAutoItExitRegister('Reset')

    Global $TimerInit = TimerInit()
    Global $Counter = 0

    While 1

    $TimerDiff = TimerDiff($TimerInit)
    If $Counter = 6 Then
    ;10 phút thì Counter +1 => 60ph
    Exit ; => Thực hiện Reset()
    ElseIf $TimerDiff > 600000 Then ;10 phút
    _Reduce_Memory() ;giải phóng bộ nhớ chương trình
    Sleep(10000) ;xả hơi tí
    $TimerInit = TimerInit()
    $Counter += 1
    EndIf

    ;Code chính của bạn
    WEnd


    Func Reset()

    Run('Đường dẫn exe chương trình')
    EndFunc

    Func _Reduce_Memory($iPID = @AutoItPID)
    ;autoitscript.com
    Local $iProcExists = ProcessExists($iPID)
    If Not $iProcExists Then Return SetError(1)
    If IsString($iPID) Then $iPID = $iProcExists
    Local $hOpenProc = DllCall("Kernel32.dll", "int", "OpenProcess", "int", 0x1F0FFF, "int", False, "int", $iPID)
    Local $aResult = DllCall("Kernel32.dll", "int", "SetProcessWorkingSetSize", "hwnd", $hOpenProc[0], "int", -1, "int", -1)
    DllCall("Kernel32.dll", "int", "CloseHandle", "int", $hOpenProc[0])
    If Not IsArray($aResult) Or $aResult[0] = 0 Then Return SetError(2)
    Return $aResult[0]
    EndFunc

    :)):)):)) Không biết có hiệu quả không
     
    ntprohd, emga9xkc and tuoitre like this.
  7. dangmymy

    dangmymy Thành viên mới
    • 1/6

    Tham gia ngày:
    4/4/16
    Bài viết:
    3
    Đã được thích:
    0
    cảm ơn bạn nhiều nhé , đúng thứ mình cần tìm :D
     
  8. emga9xkc

    emga9xkc Thành viên năng động
    • 43/45

    Tham gia ngày:
    7/3/16
    Bài viết:
    232
    Đã được thích:
    205
    cái này sử dụng như nào vậy bác ơi
     
    kamsamita1 thích bài này.
  9. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    Chỗ comment ;Code chính của bạn thým quăng code của thým vào là xong :p
     
    kamsamita1 thích bài này.
  10. emga9xkc

    emga9xkc Thành viên năng động
    • 43/45

    Tham gia ngày:
    7/3/16
    Bài viết:
    232
    Đã được thích:
    205
    :D e chạy thử code mà ko sửa gì:
    lỗi như này bác ơi:
    Mã (AutoIt):
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(16,15) : error: syntax error
    $Counter += 1?
    ~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(28,41) : warning: $iPID: possibly used before declaration.
    Local $iProcExists = ProcessExists($iPID)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(28,42) : error: syntax error
    Local $iProcExists = ProcessExists($iPID)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(30,45) : warning: $iProcExists: possibly used before declaration.
    If IsString($iPID) Then $iPID = $iProcExists
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(31,110) : error: syntax error
    Local $hOpenProc = DllCall("Kernel32.dll", "int", "OpenProcess", "int", 0x1F0FFF, "int", False, "int", $iPID)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(32,98) : warning: $hOpenProc: possibly used before declaration.
    Local $aResult = DllCall("Kernel32.dll", "int", "SetProcessWorkingSetSize", "hwnd", $hOpenProc[0],
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(32,121) : error: syntax error
    Local $aResult = DllCall("Kernel32.dll", "int", "SetProcessWorkingSetSize", "hwnd", $hOpenProc[0], "int", -1, "int", -1)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(33,67) : error: syntax error
    DllCall("Kernel32.dll", "int", "CloseHandle", "int", $hOpenProc[0])
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(34,41) : warning: $aResult: possibly used before declaration.
    If Not IsArray($aResult) Or $aResult[0] =
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(34,45) : error: syntax error
    If Not IsArray($aResult) Or $aResult[0] = 0 Then
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(35,20) : error: syntax error
    Return $aResult[0]?
    ~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(28,41) : error: $iPID: undeclared global variable.
    Local $iProcExists = ProcessExists($iPID)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(30,45) : error: $iProcExists: undeclared global variable.
    If IsString($iPID) Then $iPID = $iProcExists
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(32,98) : error: $hOpenProc: undeclared global variable.
    Local $aResult = DllCall("Kernel32.dll", "int", "SetProcessWorkingSetSize", "hwnd", $hOpenProc[0],
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(34,41) : error: $aResult: undeclared global variable.
    If Not IsArray($aResult) Or $aResult[0] =
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(3,29) : error: Reset(): undefined function.
    OnAutoItExitRegister('Reset')
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3"(13,16) : error: _Reduce_Memory(): undefined function.
    _Reduce_Memory()
    ~~~~~~~~~~~~~~~^
    C:\Users\Win8.1\Desktop\BoLStudio\aaaaaaaaaaaaaaaaaaaaaaaa.au3 - 13 error(s), 4 warning(s)
    !>11:45:01 AU3Check ended. Press F4 to jump to next error.rc:2
     
    kamsamita1 thích bài này.
  11. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    @emga9xkc : Vỡi, thým copy thiếu dòng nào rồi chứ gì mà lỗi từ trên xuống dưới thế kia :v =))
     
    kamsamita1 thích bài này.
  12. Tungtata

    Tungtata Tà tà mà sống ~ Thành viên BQT Administrator
    • 93/113

    Tham gia ngày:
    25/8/15
    Bài viết:
    289
    Đã được thích:
    924
    Nơi ở:
    Hà Nội
    bạn xem trong vòng lặp của bạn có gán biến gì hay không? nếu có thể thì show lên đây, nếu có gán biến, ví dụ thêm mảng chẳng hạn, nối chuỗi hay gì đó chẳng hạn thì bạn cần giải phóng biến đó đi
    ví dụ nhỏ
    Mã (AutoIt):

    $i = 0
    global $Array
    while 1
        $i +=1
        $arrray[$i] = random(0,999,1)
        msgbox(0,'',$arrray[$i]) ; ĐÃ LÀM XONG NHIỆM VỤ CỦA BIẾN
    wend
     
    thì bạn có thể sửa như sau
    Mã (AutoIt):

    $i = 0
    global $Array
    while 1
        $i +=1
        $arrray[$i] = random(0,999,1)
        msgbox(0,'',$arrray[$i]) ; ĐÃ LÀM XONG NHIỆM VỤ CỦA BIẾN
        $arrray[$i] = '' ; XÓA GIÁ TRỊ CỦA PHẦN TỬ
    wend
     
    cách này vẫn chưa thực sự tối ưu, mình chỉ chợt nghĩ tới, cái quan trọng bạn phải giải phóng các biến k sử dụng đến nữa, đừng để nó nằm trong ram, vậy thôi
     
    kamsamita1 and emga9xkc like this.

Chia sẻ trang này

Đang tải...