Sign in to follow this  
Followers 0
Slym

FileOpenDialog is slow to return

17 posts in this topic

#1 ·  Posted (edited)

Hi there,

There is something weird with FileSaveDialog. It takes approximately 8 seconds on my computer to return after clicking on OK.

When compiling this exact code it looks faster but I still have this slow behaviour on another compiled software (LinuxLive USB Creator).

$DEBUG_TIMER=TimerInit()
$source_file = FileOpenDialog("Please choose an ISO image of LinuxLive CD", "", "ISO / IMG / ZIP (*.iso;*.img;*.zip)", 1,"")
ConsoleWrite("It took "&Round(TimerDiff($DEBUG_TIMER)/1000,1)&" seconds to select ISO")

Do you know what could cause this ?

Thank you for your help

 

PS : I'm still looking for AutoIT devs to help me on LinuxLive USB Creator. If interested, please contact me.

Edited by Slym

--------------------- [font="Franklin Gothic Medium"]LinuxLive USB Creator[/font], [size="3"]The only Linux Live USB creator with easy integrated virtualization (made with AutoIT)[/size] ---------------------

Share this post


Link to post
Share on other sites



Hi,

The timer showed here starts when the dialog is showed, and not after you clicked the OK button.

There is no kind of any "lag" for me.

Br, FireFox.


 

OS : Win XP SP2 (32 bits) / Win 7 SP1 (64 bits) / Win 8 (64 bits) | Autoit version: latest stable / beta.
Hardware : Intel(R) Core(TM) i5-2400 CPU @ 3.10Ghz / 8 GiB RAM DDR3.

My UDFs : Skype UDF | TrayIconEx UDF | GUI Panel UDF | Excel XML UDF | Is_Pressed_UDF

My Projects : YouTube Multi-downloader | FTP Easy-UP | Lock'n | WinKill | AVICapture | Skype TM | Tap Maker | ShellNew | Scriptner | Const Replacer | FT_Pocket | Chrome theme maker

My Examples : Capture toolIP Camera | Crosshair | Draw Captured Region | Picture Screensaver | Jscreenfix | Drivetemp | Picture viewer

My Snippets : Basic TCP | Systray_GetIconIndex | Intercept End task | Winpcap various | Advanced HotKeySet | Transparent Edit control

 

Share this post


Link to post
Share on other sites

The delay is not only because the timer is before. Even if you take only 1 sec to click on OK, it will take approximately 8 seconds to return the value on my system (Win 8.1 x64 + SSD + 16 GB RAM ...). I had the same bug on my Windows 7 x64 with the same setup.

When you select an ISO there is a big lag. I isolated the code and I still have the same lag randomly.

Maybe something weird in AutoIT framework in this function ? Or it could be related to x64 versions ?


--------------------- [font="Franklin Gothic Medium"]LinuxLive USB Creator[/font], [size="3"]The only Linux Live USB creator with easy integrated virtualization (made with AutoIT)[/size] ---------------------

Share this post


Link to post
Share on other sites

Tested on Win7 and Win8 (64 bits) and no lags (with different iso sizes).

If you still think it's an issue, you can submit a ticket in the BugTracker (link in the forum menu).

Br, FireFox.


 

OS : Win XP SP2 (32 bits) / Win 7 SP1 (64 bits) / Win 8 (64 bits) | Autoit version: latest stable / beta.
Hardware : Intel(R) Core(TM) i5-2400 CPU @ 3.10Ghz / 8 GiB RAM DDR3.

My UDFs : Skype UDF | TrayIconEx UDF | GUI Panel UDF | Excel XML UDF | Is_Pressed_UDF

My Projects : YouTube Multi-downloader | FTP Easy-UP | Lock'n | WinKill | AVICapture | Skype TM | Tap Maker | ShellNew | Scriptner | Const Replacer | FT_Pocket | Chrome theme maker

My Examples : Capture toolIP Camera | Crosshair | Draw Captured Region | Picture Screensaver | Jscreenfix | Drivetemp | Picture viewer

My Snippets : Basic TCP | Systray_GetIconIndex | Intercept End task | Winpcap various | Advanced HotKeySet | Transparent Edit control

 

Share this post


Link to post
Share on other sites

Slym,

Try turning off your AV scanner temporarily and see if the lag still exists then. ;)

M23

1 person likes this

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Thanks for your answers. I tried disabling EVERYTHING on my pc (I stopped every other software and every service I could stop including Antivirus).

I retried and had the same lag.

Could you please retry to open a random file 10 times with the code in this post and see if you clearly see a lag between the moment you click on OK and the moment you see the return from consolewrite ?

PS: I tried to open a bug report but I could not login into Trac (Authentication information not available).


--------------------- [font="Franklin Gothic Medium"]LinuxLive USB Creator[/font], [size="3"]The only Linux Live USB creator with easy integrated virtualization (made with AutoIT)[/size] ---------------------

Share this post


Link to post
Share on other sites

Slym,

The code works fine for me - no delays at all - so I remain convinced that the problem is something on your machines and not AutoIt. Besides, I believe that function is a simple call to the Windows API, so I doubt there is much AutoIt code involved at all. :)

As to Trac, you do not need to log in - only authorised people can do that in order to manage the Trac system. If you want to be identified as the author of the ticket, just make sure you add your name to the relevant field. But I warn you now that because it is not reproducable by others that it is likely to be closed pretty quickly with a "Works for me" response. ;)

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

#9 ·  Posted (edited)

This is a slow return for me as well:

$loadpath= fileopendialog("Load Control File", $g_cc_controlsavepath, "txt(*.txt)")

I think it has something to do with how my SSD and the function work together.  I remember from my past that those filedialogs would sometimes lockup for like 20 seconds when you would click the path history combo.  (That was just Windows, before I even knew of AutoIt)

You can make your own custom filedialog, that I'm pretty sure will avoid the delay.

example:

filedialog.png

Let me know if you want the code.

Edited by Xandy

I am not a lawyer.  (-_-) Xandy About  (^o^) Discord - Xandy Programmer

Share this post


Link to post
Share on other sites

Thanks but my code is already a mess and I try to avoid using custom functions as much as I can.


--------------------- [font="Franklin Gothic Medium"]LinuxLive USB Creator[/font], [size="3"]The only Linux Live USB creator with easy integrated virtualization (made with AutoIT)[/size] ---------------------

Share this post


Link to post
Share on other sites

#12 ·  Posted (edited)

 

That looks awesome! Which graphical lib are you using? SDL? GDI?

 

 

SDL and your >UDF it's what I am familiar with.  : )

I ripped the font from Dragon Warrior 3 screenshots.

Edited by Xandy

I am not a lawyer.  (-_-) Xandy About  (^o^) Discord - Xandy Programmer

Share this post


Link to post
Share on other sites

I ripped the font from Dragon Warrior 3 screenshots.  SDL and your UDF it's what I am familiar with.  : )

I sure would like to see it. I Actually tried doing a custom filedialog like that myself once, but I got lazy somewhere after I got file/folder rendering done ;)

But Slym said no so lets not go more off topic here. Post in Examples Scripts or in a PM? :)

1 person likes this

Share this post


Link to post
Share on other sites

Slym,

Have you tried using my ChooseFileFolder UDF? It does not use the standard dialog - perhaps it might be faster for you. ;)

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Slym,

Fine. Although as I believe the native function uses the Windows API, your request for a "low-level function" will only result in the same dialog appearing. I thought you might like to try the UDF and see if it was in fact the API that was causing your problems as the UDF does not use it. :)

M23

1 person likes this

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Similar Content

    • Fenzik
      By Fenzik
      Hello,
      my question is based on topic about Nvda Screen reader development atThis Link
      Autoit GUI is totaly nice for blind users, because it's controls are mostly standart.
      But in cooperation with Screen Readers this guis are much slower than other guis.
      Do you have any idea about reason of this behaviour?
      Thanks a lot for any answer.
      Fenzik
    • PINTO1927
      By PINTO1927
      Hello guys,
      I'm working on this script:
      Case $BTN Global $URL = FileOpenDialog("IMPORT FILE", $DESKTOP, "ALL FORMAT (*)", 4) $DIR_DEST = "C:\DIR-WORK\list\IMPORT_DOC\" DirCreate($DIR_DEST) Local $LINE For $t = 1 To $URL[0] _FileReadToArray($URL[$t], $LINE) For $u = 1 To $LINE[0] FileCopy($URL[$u], $DIR_DEST) Next Next the selected files via OpenFileDialog must be copied to the folder $DIR_DEST.
       
    • rootx
      By rootx
      Why if I select only one file the array doesn't return the path?? And 4 multiple files return the row PATH? There is a mode to have in the same case signle or multiple selection the path included in the file name? THX
      #include <Array.au3> #include <File.au3> Local $spFile $mFile = FileOpenDialog("apri", @ScriptDir & "", "Images (*.iso)", 1 + 4 ) If @error Then ConsoleWrite("error") Else $spFile = StringSplit($mFile, "|") EndIf _ArrayDisplay($spFile)  
    • weirddave
      By weirddave
      I have created a Gui with a number of GUICtrlCreateButton()
      When I click on them with the mouse, the response by my script is very slow (1-2 secs), but if I navigate the buttons using the arrow keys and activate them with the Enter key, the response is fairly instant. Has anyone else seen this, and perhaps solved it?
      Dave
    • AlexChernavsky
      By AlexChernavsky
      I'm having a strange issue with using FileOpenDialog to select a file. Everything works fine the first time you select a file. But if you change your mind (while the program is still running) and want to select a different file, nothing changes. The program is "stuck" with the first selection you made, and nothing you do will change that selection in the input box.

      I pulled the function below out of my program, and I had to modify it a bit to make it run on its own. But it's basically the same as the original.

      To see the problem in action, click on either of the two buttons that say, "Choose other file...". Select any file from the list. Click on the "Open" button. So far, so good. Now, repeat the process again. See? The original file you selected is still listed in the input box.

      I'm stumped by this one.

      Thanks in advance.

      -- Alex Chernavsky in Rochester, NY


      #include <GUIConstantsEx.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> _ConfirmParametersWithUser("test.txt", "test2.txt", 16, 1000, 3000, "InputFile", "WriteToFile", "Testing") Func _ConfirmParametersWithUser($sInputFileName, $sOutputFileName, $iNumberOfProblems, $iMinTime, $iMaxTime, $sSourceOfProblems, $sOutputType, $sCondition) Local $hSetParametersForm ; Handle to GUI Local $hRadio1 Local $hRadio2 Local $hRadio3 Local $hRadio4 Local $hInputFileName Local $hChooseInputFile Local $hOutputFileName Local $hChooseOutputFile Local $hTrialsPerSession Local $hTime1 Local $hTime2 Local $hCondition Local $hExitButton Local $hHelpButton Local $hContinueButton Local $nMsg Local $sTemp $sInputFileName = @ScriptDir & "\" & $sInputFileName $sOutputFileName = @ScriptDir & "\" & $sOutputFileName $hSetParametersForm = GUICreate("Reaction Time Program: Set Parameters", 580, 578, -1, -1) GUICtrlCreateLabel("Reaction Time Program", 175, 3, 205, 23) GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif") GUICtrlCreateLabel("Based on work by Seth Roberts", 200, 29, 155, 15) GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif") ;GUICtrlSetBkColor(-1, 0xCCFFCC) ; Give it a green background to make it easier to position it (it's a temporary thing to help design the GUI) GUICtrlCreateGroup("Source of arithmetic problems: ", 40, 50, 528, 105) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") GUIStartGroup() $hRadio1 = GUICtrlCreateRadio("Use problems included with source code", 64, 80, 257, 17) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") If $sSourceOfProblems = "SourceCode" Then GUICtrlSetState(-1, $GUI_CHECKED) EndIf $hRadio2 = GUICtrlCreateRadio("Read problems from input file: ", 64, 104, 280, 17) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") If $sSourceOfProblems = "InputFile" Then GUICtrlSetState(-1, $GUI_CHECKED) EndIf $hInputFileName = GUICtrlCreateInput($sInputFileName & " ", 81, 124, 380, 20) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlSetState($hInputFileName, $GUI_FOCUS) Send("{end}") ; This line and the one before it are necessary to right-align the text (useful in case of long path names, so that the left part gets cut off, not the right part) $hChooseInputFile = GUICtrlCreateButton("Choose other file...", 465, 121) If $sSourceOfProblems = "InputFile" Then GUICtrlSetState($hChooseInputFile, $GUI_ENABLE) Else GUICtrlSetState($hChooseInputFile, $GUI_DISABLE) EndIf GUICtrlCreateLabel("Number of trials (problems) presented per testing session:", 48, 167, 345, 20) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $hTrialsPerSession = GUICtrlCreateInput($iNumberOfProblems, 397, 165, 30, 22, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER)) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlCreateGroup("Random delay between trials (in milliseconds): ", 40, 198, 349, 89) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") GUICtrlCreateLabel("Minimum delay:", 64, 224, 97, 20) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlCreateLabel("Maximum delay :", 64, 256, 104, 20) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $hTime1 = GUICtrlCreateInput($iMinTime, 176, 224, 41, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER)) $hTime2 = GUICtrlCreateInput($iMaxTime, 176, 256, 41, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER)) GUICtrlCreateGroup("Upon completion of the testing session: ", 40, 296, 528, 110) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $hRadio3 = GUICtrlCreateRadio("Display summary and append data to output file: ", 64, 325, 422, 17) If $sOutputType = "WriteToFile" Then GUICtrlSetState(-1, $GUI_CHECKED) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $hOutputFileName = GUICtrlCreateInput($sOutputFileName & " ", 81, 350, 380, 20) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlSetState($hOutputFileName, $GUI_FOCUS) Send("{end}") ; This line and the one before it are necessary to right-align the text (useful in case of long path names, so that the left part gets cut off, not the right part) $hChooseOutputFile = GUICtrlCreateButton("Choose other file...", 465, 347) If $sOutputType = "WriteToFile" Then GUICtrlSetState($hChooseOutputFile, $GUI_ENABLE) Else GUICtrlSetState($hChooseOutputFile, $GUI_DISABLE) EndIf $hRadio4 = GUICtrlCreateRadio("Display summary but do not write data to output file", 64, 379, 320, 17) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") If $sOutputType = "DisplayOnly" Then GUICtrlSetState(-1, $GUI_CHECKED) GUICtrlCreateGroup("Please describe the condition for this test:", 40, 417, 520, 90) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $hCondition = GUICtrlCreateInput("", 54, 447, 500, 20) GUICtrlCreateLabel("Example: ""45 mins. after taking 3 tablespoons of flaxseed oil""", 56, 477, 550, 28) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $hHelpButton = GUICtrlCreateButton("Help", 272, 534, 75, 25) $hContinueButton = GUICtrlCreateButton("Continue", 382, 534, 75, 25, $BS_DEFPUSHBUTTON) $hExitButton = GUICtrlCreateButton("Exit Program", 488, 534, 75, 25) GUICtrlSetState($hCondition, $GUI_FOCUS) ; Set the focus to the "Condition" input box GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $hRadio1 GUICtrlSetState($hChooseInputFile, $GUI_DISABLE) Case $hRadio2 GUICtrlSetState($hChooseInputFile, $GUI_ENABLE) Case $hRadio3 GUICtrlSetState($hChooseOutputFile, $GUI_ENABLE) Case $hRadio4 GUICtrlSetState($hChooseOutputFile, $GUI_DISABLE) Case $hChooseInputFile $sTemp = FileOpenDialog("Choose input file", @ScriptDir & "\", "All files (*.*)", 1 + 2) If $sTemp Then $sInputFileName = $sTemp $hInputFileName = GUICtrlSetData($hInputFileName, $sInputFileName & " ") EndIf GUICtrlSetState($hCondition, $GUI_FOCUS) ; Return focus to the "Continue" button Case $hChooseOutputFile $sTemp = FileOpenDialog("Choose output file", @ScriptDir & "\", "All files (*.*)", 2 + 8) If $sTemp Then $sOutputFileName = $sTemp $hOutputFileName = GUICtrlSetData($hOutputFileName, $sOutputFileName & " ") EndIf GUICtrlSetState($hCondition, $GUI_FOCUS) ; Return focus to the "Continue" button Case $hHelpButton ShellExecute("http://www.astrocyte-design.com/reaction-time/index.html") Case $hContinueButton ExitLoop Case $hExitButton Exit EndSwitch WEnd If (BitAND(GUICtrlRead($hRadio1), $GUI_CHECKED) = $GUI_CHECKED) Then $sSourceOfProblems = "SourceCode" Else $sSourceOfProblems = "InputFile" EndIf $iNumberOfProblems = GUICtrlRead($hTrialsPerSession) $iMinTime = GUICtrlRead($hTime1) $iMaxTime = GUICtrlRead($hTime2) If (BitAND(GUICtrlRead($hRadio3), $GUI_CHECKED) = $GUI_CHECKED) Then $sOutputType = "WriteToFile" Else $sOutputType = "DisplayOnly" EndIf $sCondition = GUICtrlRead($hCondition) $sCondition = StringReplace($sCondition, ",", "") ; Remove any commas that the user happens to enter (they interfere with the CSV file format) GUIDelete($hSetParametersForm) EndFunc ;==>_ConfirmParametersWithUser