# BuliCommander

**URL:** <https://krita-artists.org/t/bulicommander/11612>\
**Category:** Plugins and Scripts\
**Created:** [September 5, 2020, 4:16pm UTC](https://krita-artists.org/t/bulicommander/11612 "2020-09-05T16:16:40Z")\
**Posts on this page:** 20\
**Page:** 3

<div class="post-metadata">

**Author:** ![tom](https://krita-artists.org/letter_avatar_proxy/v4/letter/t/3d9bf3/32.png) [@tom](https://krita-artists.org/u/tom)\
**Post date:** [October 4, 2022, 8:08pm UTC](https://krita-artists.org/t/bulicommander/11612/41 "2022-10-04T20:08:32Z")

</div>

```auto
DEBUG: BCFileList.execute
DEBUG: ...........................................
DEBUG: Search in paths: [<BCFileListPath('/home/name/Pictures/Art/sketches', False)>]
DEBUG: Found 517 of 699 files in 0.1009225845336914s
DEBUG: - Files: 517
DEBUG: - Directories: 0
DEBUG: Filter 517 files to 517 files in 0.30652308464050293s
DEBUG: BCFileList.execute.99-global: 0.4912
DEBUG: BCFileList.execute.01-search: 0.1009
DEBUG: BCFileList.execute.02-filter: 0.3065
DEBUG: BCFileList.execute.03-result: 0.0448
DEBUG: BCFileList.execute.04-buildStats: 0.0386
DEBUG: BCFileList.execute.05-sort: 0.0000
DEBUG: ===========================================
DEBUG: ===========================================
DEBUG: BCFileList.execute
DEBUG: ...........................................
DEBUG: Search in paths: [<BCFileListPath('/home/name/Pictures/Art', False)>]
DEBUG: Found 29 of 31 files in 0.05680274963378906s
DEBUG: - Files: 6
DEBUG: - Directories: 23
DEBUG: Filter 29 files to 6 files in 0.03953099250793457s
DEBUG: BCFileList.execute.99-global: 0.1036
DEBUG: BCFileList.execute.01-search: 0.0568
DEBUG: BCFileList.execute.02-filter: 0.0395
DEBUG: BCFileList.execute.03-result: 0.0033
DEBUG: BCFileList.execute.04-buildStats: 0.0032
DEBUG: BCFileList.execute.05-sort: 0.0000
DEBUG: ===========================================
DEBUG: ===========================================
DEBUG: BCFileList.execute
DEBUG: ...........................................
DEBUG: Search in paths: [<BCFileListPath('/home/name/Pictures/Art/sketches', False)>]
DEBUG: Found 517 of 699 files in 0.05538177490234375s
DEBUG: - Files: 517
DEBUG: - Directories: 0
DEBUG: Filter 517 files to 517 files in 0.27915453910827637s
DEBUG: BCFileList.execute.99-global: 0.4266
DEBUG: BCFileList.execute.01-search: 0.0554
DEBUG: BCFileList.execute.02-filter: 0.2792
DEBUG: BCFileList.execute.03-result: 0.0573
DEBUG: BCFileList.execute.04-buildStats: 0.0341
DEBUG: BCFileList.execute.05-sort: 0.0000
DEBUG: ===========================================
```

---

<div class="post-metadata">

**Author:** ![Grum999](https://krita-artists.org/user_avatar/krita-artists.org/grum999/32/66488_2.png) [@Grum999](https://krita-artists.org/u/Grum999)\
**Post date:** [October 4, 2022, 8:12pm UTC](https://krita-artists.org/t/bulicommander/11612/42 "2022-10-04T20:12:41Z")

</div>

Ok thanks!

So clearly times to process directories are the same, problem occurs during startup…

Grum999

---

<div class="post-metadata">

**Author:** ![Grum999](https://krita-artists.org/user_avatar/krita-artists.org/grum999/32/66488_2.png) [@Grum999](https://krita-artists.org/u/Grum999)\
**Post date:** [October 5, 2022, 5:04pm UTC](https://krita-artists.org/t/bulicommander/11612/43 "2022-10-05T17:04:44Z")

</div>

Hi @tom

I’ve opened a ticket for this performances problem:

> <https://github.com/Grum999/BuliCommander/issues/23>
>
> From KA forum: https://krita-artists.org/t/bulicommander/11612/34?u=grum999
> 
> S…tarting to look in detail execution time:
> \- Open window plugin from directory X: ~2.28s
> \- Change directory to X: ~0.98s
> 
> \## Some detailed execution time comparison
> 
> \### Startup 
> 
> \`\`\` text 
> DEBUG: \>\> Start: BCMainWindow.01.00.init
> DEBUG: \>\> Start: BCMainWindow.01.01.init-ui
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].01.99.init
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].01.01.init-var
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].01.01.init-var -- (0.00280499 @+0.01607823)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].01.02.init-ui
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].01.02.init-ui -- (0.12602472 @+0.14213943)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].01.03.init-misc
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].01.03.init-misc -- (0.01798463 @+0.16016626)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].01.99.init -- (0.14694500 @+0.16020155)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].01.99.init
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].01.01.init-var
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].01.01.init-var -- (0.00040483 @+0.16159034)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].01.02.init-ui
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].01.02.init-ui -- (0.07224846 @+0.23386097)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].01.03.init-misc
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].01.03.init-misc -- (0.01197386 @+0.24586987)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].01.99.init -- (0.08471298 @+0.24588680)
> DEBUG: \<\< Stop: BCMainWindow.01.01.init-ui -- (0.68344665 @+0.68351483)
> DEBUG: \>\> Start: BCMainWindow.01.02.init-var
> DEBUG: \<\< Stop: BCMainWindow.01.02.init-var -- (0.02447295 @+0.70802069)
> DEBUG: \<\< Stop: BCMainWindow.01.00.init -- (0.70799017 @+0.70803857)
> DEBUG: \>\> Start: BCUIController.01.99.\_\_initSettings
> DEBUG: \>\> Start: BCUIController.01.01.\_\_initSettings
> DEBUG: \>\> Start: BCMainWindow.02.00.initMainView
> DEBUG: \<\< Stop: BCMainWindow.02.00.initMainView -- (0.01224232 @+0.74112058)
> DEBUG: \<\< Stop: BCUIController.01.01.\_\_initSettings -- (0.01230788 @+0.74114633)
> DEBUG: \>\> Start: BCUIController.01.02.\_\_initSettings
> DEBUG: \<\< Stop: BCUIController.01.02.\_\_initSettings -- (0.00000501 @+0.74116278)
> DEBUG: \>\> Start: BCUIController.01.03.\_\_initSettings
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.99
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.01
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.01 -- (0.00000429 @+1.10067368)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.02
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.02 -- (0.00002956 @+1.10071540)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.99 -- (0.00053740 @+1.10072351)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].filesPath\_Changed.01.99
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].filesPath\_Changed.01.01
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].filesPath\_Changed.01.01 -- (0.00000691 @+1.21730828)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].filesPath\_Changed.01.02
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].filesPath\_Changed.01.02 -- (0.00002718 @+1.21735001)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].filesPath\_Changed.01.99 -- (0.00048923 @+1.21735787)
> DEBUG: \<\< Stop: BCUIController.01.03.\_\_initSettings -- (0.53420448 @+1.27538252)
> DEBUG: \>\> Start: BCUIController.01.04.\_\_initSettings
> DEBUG: \<\< Stop: BCUIController.01.04.\_\_initSettings -- (0.00384974 @+1.27926517)
> DEBUG: \>\> Start: BCUIController.01.05.\_\_initSettings
> DEBUG: \<\< Stop: BCUIController.01.05.\_\_initSettings -- (0.00016642 @+1.27945542)
> DEBUG: \>\> Start: BCUIController.01.06.\_\_initSettings
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01
> DEBUG: ===========================================
> DEBUG: BCFileList.execute
> DEBUG: ...........................................
> DEBUG: Search in paths: \[\<BCFileListPath('/home/grum/Data/Temp/testmd5', False)\>\]
> DEBUG: Found 500 of 500 files in 0.01070857048034668s
> DEBUG: - Files: 500
> DEBUG: - Directories: 0
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00093722 @+1.30013943)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.12679362 @+1.42696834)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 500 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.12679362
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00093722
> DEBUG: ===========================================
> DEBUG: Filter 500 files to 500 files in 0.1286461353302002s
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00012541 @+1.42807961)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.01892900 @+1.44703436)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 500 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.01892900
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00012541
> DEBUG: ===========================================
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00005937 @+1.44839334)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.01685643 @+1.46526504)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 500 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.01685643
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00005937
> DEBUG: ===========================================
> DEBUG: BCFileList.execute.01-search: 0.01070857
> DEBUG: BCFileList.execute.02-filter: 0.12864614
> DEBUG: BCFileList.execute.03-result: 0.02039981
> DEBUG: BCFileList.execute.04-buildStats: 0.01811695
> DEBUG: BCFileList.execute.05-sort: 0.00000477
> DEBUG: BCFileList.execute.99-global: 0.17827249
> DEBUG: ===========================================
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01 -- (0.18720889 @+1.46670890)
> DEBUG: \>\> Start: BCFileModel\[0x7f8f5729d940\].\_\_dataUpdateSort
> DEBUG: \<\< Stop: BCFileModel\[0x7f8f5729d940\].\_\_dataUpdateSort -- (0.00320649 @+1.49513841)
> DEBUG: \>\> Start: BCFileModel\[0x7f8f5729db80\].\_\_dataUpdateSort
> DEBUG: \<\< Stop: BCFileModel\[0x7f8f5729db80\].\_\_dataUpdateSort -- (0.00322151 @+1.49837637)
> DEBUG: \<\< Stop: BCUIController.01.06.\_\_initSettings -- (0.87273455 @+2.15220380)
> DEBUG: \>\> Start: BCUIController.01.07.\_\_initSettings
> DEBUG: \<\< Stop: BCUIController.01.07.\_\_initSettings -- (0.01808476 @+2.17030978)
> DEBUG: \<\< Stop: BCUIController.01.99.\_\_initSettings -- (1.44156599 @+2.17032361)
> \`\`\` 
> 
> \### Change directory 
> \`\`\`text
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.99
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.01
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01
> DEBUG: ===========================================
> DEBUG: BCFileList.execute
> DEBUG: ...........................................
> DEBUG: Search in paths: \[\<BCFileListPath('/home/grum/Data/Temp', False)\>\]
> DEBUG: Found 2 of 2 files in 0.0032536983489990234s
> DEBUG: - Files: 0
> DEBUG: - Directories: 2
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00006485 @+0.03051114)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.00513172 @+0.03565860)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 2 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.00513172
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00006485
> DEBUG: ===========================================
> DEBUG: Filter 2 files to 0 files in 0.007854938507080078s
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00009227 @+0.03849816)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.00090194 @+0.03941655)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 2 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.00090194
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00009227
> DEBUG: ===========================================
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00005913 @+0.04062867)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.00026751 @+0.04091001)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 2 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.00026751
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00005913
> DEBUG: ===========================================
> DEBUG: BCFileList.execute.01-search: 0.00325370
> DEBUG: BCFileList.execute.02-filter: 0.00785494
> DEBUG: BCFileList.execute.03-result: 0.00217199
> DEBUG: BCFileList.execute.04-buildStats: 0.00148511
> DEBUG: BCFileList.execute.05-sort: 0.00000548
> DEBUG: BCFileList.execute.99-global: 0.01508451
> DEBUG: ===========================================
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01 -- (0.01538610 @+0.04220343)
> DEBUG: \>\> Start: BCFileModel\[0x7f8f5729d940\].\_\_dataUpdateSort
> DEBUG: \<\< Stop: BCFileModel\[0x7f8f5729d940\].\_\_dataUpdateSort -- (0.00720882 @+0.04965401)
> DEBUG: \>\> Start: BCFileModel\[0x7f8f5729db80\].\_\_dataUpdateSort
> DEBUG: \<\< Stop: BCFileModel\[0x7f8f5729db80\].\_\_dataUpdateSort -- (0.00121999 @+0.05089617)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.01 -- (0.08555675 @+0.11235952)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.02
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.02 -- (0.00003886 @+0.11242580)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.99 -- (0.08572698 @+0.11243534)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.99
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.01
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01
> DEBUG: ===========================================
> DEBUG: BCFileList.execute
> DEBUG: ...........................................
> DEBUG: Search in paths: \[\<BCFileListPath('/home/grum/Data/Temp/testmd5', False)\>\]
> DEBUG: Found 500 of 500 files in 0.005563497543334961s
> DEBUG: - Files: 500
> DEBUG: - Directories: 0
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00057912 @+0.03675056)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.14278078 @+0.17955852)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 500 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.14278078
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00057912
> DEBUG: ===========================================
> DEBUG: Filter 500 files to 500 files in 0.144622802734375s
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00009561 @+0.18100595)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.02333617 @+0.20436239)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 500 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.02333617
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00009561
> DEBUG: ===========================================
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00005960 @+0.20569110)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.01848555 @+0.22419667)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 500 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.01848555
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00005960
> DEBUG: ===========================================
> DEBUG: BCFileList.execute.01-search: 0.00556350
> DEBUG: BCFileList.execute.02-filter: 0.14462280
> DEBUG: BCFileList.execute.03-result: 0.02474046
> DEBUG: BCFileList.execute.04-buildStats: 0.01975489
> DEBUG: BCFileList.execute.05-sort: 0.00000739
> DEBUG: BCFileList.execute.99-global: 0.19499040
> DEBUG: ===========================================
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01 -- (0.19524097 @+0.22555137)
> DEBUG: \>\> Start: BCFileModel\[0x7f8f5729d940\].\_\_dataUpdateSort
> DEBUG: \<\< Stop: BCFileModel\[0x7f8f5729d940\].\_\_dataUpdateSort -- (0.00671434 @+0.25686765)
> DEBUG: \>\> Start: BCFileModel\[0x7f8f5729db80\].\_\_dataUpdateSort
> DEBUG: \<\< Stop: BCFileModel\[0x7f8f5729db80\].\_\_dataUpdateSort -- (0.00304866 @+0.25993586)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.01 -- (0.91623616 @+0.94653130)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.02
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.02 -- (0.00010061 @+0.94665956)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.99 -- (0.91646218 @+0.94666839)
> \`\`\` 
> 
> \## Some analysis 
> 
> \- UI creation took 0.68s \*\*\*(it's long!)\*\*\*
> \`DEBUG: \<\< Stop: BCMainWindow.01.01.init-ui -- (0.68344665 @+0.68351483)\`
> \- Panels initialisation took 0.53s \*\*\*(it's long!)\*\*\*
> \`DEBUG: \<\< Stop: BCUIController.01.03.\_\_initSettings -- (0.53420448 @+1.27538252)\`
> \- File search+analysis+filter+sort took 0.18s \*\*\*(it's fast)\*\*\*
> \`DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01 -- (0.18720889 @+1.46670890)\`
> \- Something happen during initialisation step 06 (include \*File search+analysis+filter+sort\*)
> \`DEBUG: \<\< Stop: BCUIController.01.06.\_\_initSettings -- (0.87273455 @+2.15220380)\`
> There 0.68s (2.15220380 - 1.46670890) spent between end of panel udpdate & plugin init \*\*\*(it's long!)\*\*\*
> 
> 
> These point need to be analyzed deeper to understand from where came this duration and try to reduce them

Also on my side I already made some improvement in file search process, to reduce number of threads due to cache management that is less efficient in multithreading 😅

Test on 14250 files, 110GB

# Load files metadata

| #Threads | Without cache initialized | With cache initialized |
| --- | --- | --- |
| 1 (for next version) | 10.44s | 3.56s |
| 24 (from current version) | 19.67s | 6.52s |

# Load files thumbnails

| #Threads | Without cache initialized | With cache initialized |
| --- | --- | --- |
| 1 | 1542s | 2.61s |
| 14 (for next version - 60% of available threads) | 428s | 2.70s |
| 24 (from current version) | 436s | 2.75s |

Grum999

---

<div class="post-metadata">

**Author:** ![Grum999](https://krita-artists.org/user_avatar/krita-artists.org/grum999/32/66488_2.png) [@Grum999](https://krita-artists.org/u/Grum999)\
**Post date:** [October 9, 2022, 9:32am UTC](https://krita-artists.org/t/bulicommander/11612/44 "2022-10-09T09:32:19Z")

</div>

Found some improvements:

> <https://github.com/Grum999/BuliCommander/issues/23#issuecomment-1272498403>
>
> From KA forum: https://krita-artists.org/t/bulicommander/11612/34?u=grum999
> 
> S…tarting to look in detail execution time:
> \- Open window plugin from directory X: ~2.28s
> \- Change directory to X: ~0.98s
> 
> \## Some detailed execution time comparison
> 
> \### Startup 
> 
> \`\`\` text 
> DEBUG: \>\> Start: BCMainWindow.01.00.init
> DEBUG: \>\> Start: BCMainWindow.01.01.init-ui
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].01.99.init
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].01.01.init-var
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].01.01.init-var -- (0.00280499 @+0.01607823)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].01.02.init-ui
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].01.02.init-ui -- (0.12602472 @+0.14213943)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].01.03.init-misc
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].01.03.init-misc -- (0.01798463 @+0.16016626)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].01.99.init -- (0.14694500 @+0.16020155)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].01.99.init
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].01.01.init-var
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].01.01.init-var -- (0.00040483 @+0.16159034)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].01.02.init-ui
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].01.02.init-ui -- (0.07224846 @+0.23386097)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].01.03.init-misc
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].01.03.init-misc -- (0.01197386 @+0.24586987)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].01.99.init -- (0.08471298 @+0.24588680)
> DEBUG: \<\< Stop: BCMainWindow.01.01.init-ui -- (0.68344665 @+0.68351483)
> DEBUG: \>\> Start: BCMainWindow.01.02.init-var
> DEBUG: \<\< Stop: BCMainWindow.01.02.init-var -- (0.02447295 @+0.70802069)
> DEBUG: \<\< Stop: BCMainWindow.01.00.init -- (0.70799017 @+0.70803857)
> DEBUG: \>\> Start: BCUIController.01.99.\_\_initSettings
> DEBUG: \>\> Start: BCUIController.01.01.\_\_initSettings
> DEBUG: \>\> Start: BCMainWindow.02.00.initMainView
> DEBUG: \<\< Stop: BCMainWindow.02.00.initMainView -- (0.01224232 @+0.74112058)
> DEBUG: \<\< Stop: BCUIController.01.01.\_\_initSettings -- (0.01230788 @+0.74114633)
> DEBUG: \>\> Start: BCUIController.01.02.\_\_initSettings
> DEBUG: \<\< Stop: BCUIController.01.02.\_\_initSettings -- (0.00000501 @+0.74116278)
> DEBUG: \>\> Start: BCUIController.01.03.\_\_initSettings
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.99
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.01
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.01 -- (0.00000429 @+1.10067368)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.02
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.02 -- (0.00002956 @+1.10071540)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.99 -- (0.00053740 @+1.10072351)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].filesPath\_Changed.01.99
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].filesPath\_Changed.01.01
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].filesPath\_Changed.01.01 -- (0.00000691 @+1.21730828)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729df70\].filesPath\_Changed.01.02
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].filesPath\_Changed.01.02 -- (0.00002718 @+1.21735001)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729df70\].filesPath\_Changed.01.99 -- (0.00048923 @+1.21735787)
> DEBUG: \<\< Stop: BCUIController.01.03.\_\_initSettings -- (0.53420448 @+1.27538252)
> DEBUG: \>\> Start: BCUIController.01.04.\_\_initSettings
> DEBUG: \<\< Stop: BCUIController.01.04.\_\_initSettings -- (0.00384974 @+1.27926517)
> DEBUG: \>\> Start: BCUIController.01.05.\_\_initSettings
> DEBUG: \<\< Stop: BCUIController.01.05.\_\_initSettings -- (0.00016642 @+1.27945542)
> DEBUG: \>\> Start: BCUIController.01.06.\_\_initSettings
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01
> DEBUG: ===========================================
> DEBUG: BCFileList.execute
> DEBUG: ...........................................
> DEBUG: Search in paths: \[\<BCFileListPath('/home/grum/Data/Temp/testmd5', False)\>\]
> DEBUG: Found 500 of 500 files in 0.01070857048034668s
> DEBUG: - Files: 500
> DEBUG: - Directories: 0
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00093722 @+1.30013943)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.12679362 @+1.42696834)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 500 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.12679362
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00093722
> DEBUG: ===========================================
> DEBUG: Filter 500 files to 500 files in 0.1286461353302002s
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00012541 @+1.42807961)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.01892900 @+1.44703436)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 500 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.01892900
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00012541
> DEBUG: ===========================================
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00005937 @+1.44839334)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.01685643 @+1.46526504)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 500 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.01685643
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00005937
> DEBUG: ===========================================
> DEBUG: BCFileList.execute.01-search: 0.01070857
> DEBUG: BCFileList.execute.02-filter: 0.12864614
> DEBUG: BCFileList.execute.03-result: 0.02039981
> DEBUG: BCFileList.execute.04-buildStats: 0.01811695
> DEBUG: BCFileList.execute.05-sort: 0.00000477
> DEBUG: BCFileList.execute.99-global: 0.17827249
> DEBUG: ===========================================
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01 -- (0.18720889 @+1.46670890)
> DEBUG: \>\> Start: BCFileModel\[0x7f8f5729d940\].\_\_dataUpdateSort
> DEBUG: \<\< Stop: BCFileModel\[0x7f8f5729d940\].\_\_dataUpdateSort -- (0.00320649 @+1.49513841)
> DEBUG: \>\> Start: BCFileModel\[0x7f8f5729db80\].\_\_dataUpdateSort
> DEBUG: \<\< Stop: BCFileModel\[0x7f8f5729db80\].\_\_dataUpdateSort -- (0.00322151 @+1.49837637)
> DEBUG: \<\< Stop: BCUIController.01.06.\_\_initSettings -- (0.87273455 @+2.15220380)
> DEBUG: \>\> Start: BCUIController.01.07.\_\_initSettings
> DEBUG: \<\< Stop: BCUIController.01.07.\_\_initSettings -- (0.01808476 @+2.17030978)
> DEBUG: \<\< Stop: BCUIController.01.99.\_\_initSettings -- (1.44156599 @+2.17032361)
> \`\`\` 
> 
> \### Change directory 
> \`\`\`text
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.99
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.01
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01
> DEBUG: ===========================================
> DEBUG: BCFileList.execute
> DEBUG: ...........................................
> DEBUG: Search in paths: \[\<BCFileListPath('/home/grum/Data/Temp', False)\>\]
> DEBUG: Found 2 of 2 files in 0.0032536983489990234s
> DEBUG: - Files: 0
> DEBUG: - Directories: 2
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00006485 @+0.03051114)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.00513172 @+0.03565860)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 2 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.00513172
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00006485
> DEBUG: ===========================================
> DEBUG: Filter 2 files to 0 files in 0.007854938507080078s
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00009227 @+0.03849816)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.00090194 @+0.03941655)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 2 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.00090194
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00009227
> DEBUG: ===========================================
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00005913 @+0.04062867)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.00026751 @+0.04091001)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 2 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.00026751
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00005913
> DEBUG: ===========================================
> DEBUG: BCFileList.execute.01-search: 0.00325370
> DEBUG: BCFileList.execute.02-filter: 0.00785494
> DEBUG: BCFileList.execute.03-result: 0.00217199
> DEBUG: BCFileList.execute.04-buildStats: 0.00148511
> DEBUG: BCFileList.execute.05-sort: 0.00000548
> DEBUG: BCFileList.execute.99-global: 0.01508451
> DEBUG: ===========================================
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01 -- (0.01538610 @+0.04220343)
> DEBUG: \>\> Start: BCFileModel\[0x7f8f5729d940\].\_\_dataUpdateSort
> DEBUG: \<\< Stop: BCFileModel\[0x7f8f5729d940\].\_\_dataUpdateSort -- (0.00720882 @+0.04965401)
> DEBUG: \>\> Start: BCFileModel\[0x7f8f5729db80\].\_\_dataUpdateSort
> DEBUG: \<\< Stop: BCFileModel\[0x7f8f5729db80\].\_\_dataUpdateSort -- (0.00121999 @+0.05089617)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.01 -- (0.08555675 @+0.11235952)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.02
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.02 -- (0.00003886 @+0.11242580)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.99 -- (0.08572698 @+0.11243534)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.99
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.01
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01
> DEBUG: ===========================================
> DEBUG: BCFileList.execute
> DEBUG: ...........................................
> DEBUG: Search in paths: \[\<BCFileListPath('/home/grum/Data/Temp/testmd5', False)\>\]
> DEBUG: Found 500 of 500 files in 0.005563497543334961s
> DEBUG: - Files: 500
> DEBUG: - Directories: 0
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00057912 @+0.03675056)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.14278078 @+0.17955852)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 500 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.14278078
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00057912
> DEBUG: ===========================================
> DEBUG: Filter 500 files to 500 files in 0.144622802734375s
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00009561 @+0.18100595)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.02333617 @+0.20436239)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 500 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.02333617
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00009561
> DEBUG: ===========================================
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init -- (0.00005960 @+0.20569110)
> DEBUG: \>\> Start: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute
> DEBUG: \<\< Stop: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute -- (0.01848555 @+0.22419667)
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Processed 500 items with 2 workers
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Execute: 0.01848555
> DEBUG: WorkerPool.{e3b30cda-f0a3-489b-b9e0-0f57ca672c1f}.Init: 0.00005960
> DEBUG: ===========================================
> DEBUG: BCFileList.execute.01-search: 0.00556350
> DEBUG: BCFileList.execute.02-filter: 0.14462280
> DEBUG: BCFileList.execute.03-result: 0.02474046
> DEBUG: BCFileList.execute.04-buildStats: 0.01975489
> DEBUG: BCFileList.execute.05-sort: 0.00000739
> DEBUG: BCFileList.execute.99-global: 0.19499040
> DEBUG: ===========================================
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01 -- (0.19524097 @+0.22555137)
> DEBUG: \>\> Start: BCFileModel\[0x7f8f5729d940\].\_\_dataUpdateSort
> DEBUG: \<\< Stop: BCFileModel\[0x7f8f5729d940\].\_\_dataUpdateSort -- (0.00671434 @+0.25686765)
> DEBUG: \>\> Start: BCFileModel\[0x7f8f5729db80\].\_\_dataUpdateSort
> DEBUG: \<\< Stop: BCFileModel\[0x7f8f5729db80\].\_\_dataUpdateSort -- (0.00304866 @+0.25993586)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.01 -- (0.91623616 @+0.94653130)
> DEBUG: \>\> Start: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.02
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.02 -- (0.00010061 @+0.94665956)
> DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].filesPath\_Changed.01.99 -- (0.91646218 @+0.94666839)
> \`\`\` 
> 
> \## Some analysis 
> 
> \- UI creation took 0.68s \*\*\*(it's long!)\*\*\*
> \`DEBUG: \<\< Stop: BCMainWindow.01.01.init-ui -- (0.68344665 @+0.68351483)\`
> \- Panels initialisation took 0.53s \*\*\*(it's long!)\*\*\*
> \`DEBUG: \<\< Stop: BCUIController.01.03.\_\_initSettings -- (0.53420448 @+1.27538252)\`
> \- File search+analysis+filter+sort took 0.18s \*\*\*(it's fast)\*\*\*
> \`DEBUG: \<\< Stop: BCMainViewTab\[0x7f8f5729d670\].\_\_filesRefresh.01 -- (0.18720889 @+1.46670890)\`
> \- Something happen during initialisation step 06 (include \*File search+analysis+filter+sort\*)
> \`DEBUG: \<\< Stop: BCUIController.01.06.\_\_initSettings -- (0.87273455 @+2.15220380)\`
> There 0.68s (2.15220380 - 1.46670890) spent between end of panel udpdate & plugin init \*\*\*(it's long!)\*\*\*
> 
> 
> These point need to be analyzed deeper to understand from where came this duration and try to reduce them

I continue to check what can be improved 😉

Grum999

---

<div class="post-metadata">

**Author:** ![Grum999](https://krita-artists.org/user_avatar/krita-artists.org/grum999/32/66488_2.png) [@Grum999](https://krita-artists.org/u/Grum999)\
**Post date:** [October 9, 2022, 1:10pm UTC](https://krita-artists.org/t/bulicommander/11612/45 "2022-10-09T13:10:32Z")

</div>

Hi @tom

I’ve made a version v0.9.1b, not officially released yet but all commits are pushed on github repository  
You can download & install zip plugin from github code with _Import python plugin from web…_ function

 ![image](https://krita-artists.org/uploads/default/original/3X/7/1/718ce22ced707de39ac205b9159b02690e6519db.png)  
And provide following url _[https://github.com/Grum999/BuliCommander/archive/refs/heads/v0.9.1b.zip](https://github.com/Grum999/BuliCommander/archive/refs/heads/v0.9.1b.zip)_

From my tests, initialization time has been reduced from 2.17s to 0.85s 🙂

Can you tell me if it’s better on your side?

If yes I’ll create an official release

Thanks

Grum999

---

<div class="post-metadata">

**Author:** ![tom](https://krita-artists.org/letter_avatar_proxy/v4/letter/t/3d9bf3/32.png) [@tom](https://krita-artists.org/u/tom)\
**Post date:** [October 9, 2022, 6:00pm UTC](https://krita-artists.org/t/bulicommander/11612/46 "2022-10-09T18:00:13Z")

</div>

Startup on the sketch folder seems to be about 3x faster when I time it myself. Nice job and thanks for your work.

One last thing I noticed, unrelated to performance: It seems like toolbars disable themselves after you configure them.

---

<div class="post-metadata">

**Author:** ![Grum999](https://krita-artists.org/user_avatar/krita-artists.org/grum999/32/66488_2.png) [@Grum999](https://krita-artists.org/u/Grum999)\
**Post date:** [October 9, 2022, 6:11pm UTC](https://krita-artists.org/t/bulicommander/11612/47 "2022-10-09T18:11:49Z")

</div>

> [@tom](#):
>
> Startup on the sketch folder seems to be about 3x faster when I time it myself.

Great 😊

> [@tom](#):
>
> Nice job and thanks for your work.

Thanks for your feedback, I never really noticed this until you told me 😉

> [@tom](#):
>
> It seems like toolbars disable themselves after you configure them.

Can you be more precise about that?  
Example, screenshot, or step to reproduce it could help

Thanks

Grum999

---

<div class="post-metadata">

**Author:** ![tom](https://krita-artists.org/letter_avatar_proxy/v4/letter/t/3d9bf3/32.png) [@tom](https://krita-artists.org/u/tom)\
**Post date:** [October 9, 2022, 6:14pm UTC](https://krita-artists.org/t/bulicommander/11612/48 "2022-10-09T18:14:40Z")

</div>

> [@Grum999](#):
>
> Can you be more precise about that?  
> Example, screenshot, or step to reproduce it could help

It seems that as soon as I hit “Okay” in the Settings dialog, regardless of the configuration tab I’m on, the custom toolbar that I’ve created will be set to disabled and have its docked position reset when I re-enable it.

The specific steps I took:

1. Create a custom toolbar using your plugin, named “Custom”, Icons with no text, with actions of “View as grid” and “View as list”. Hit Okay.
2. Enter the settings again and hit Okay.

---

<div class="post-metadata">

**Author:** ![tom](https://krita-artists.org/letter_avatar_proxy/v4/letter/t/3d9bf3/32.png) [@tom](https://krita-artists.org/u/tom)\
**Post date:** [October 9, 2022, 6:23pm UTC](https://krita-artists.org/t/bulicommander/11612/49 "2022-10-09T18:23:49Z")

</div>

Oh, it seems like the toolbar state isn’t properly saved until restarting Krita (or BuliCommander?), as it seems like there’s no issue after restarting.

---

<div class="post-metadata">

**Author:** ![Grum999](https://krita-artists.org/user_avatar/krita-artists.org/grum999/32/66488_2.png) [@Grum999](https://krita-artists.org/u/Grum999)\
**Post date:** [October 9, 2022, 6:26pm UTC](https://krita-artists.org/t/bulicommander/11612/50 "2022-10-09T18:26:53Z")

</div>

Ok thanks for steps!

It’s not ‘disabled’ (I was really thinking the toolbar entered in a disabled state)  
It’s more ‘hidden’ 🙂

Workaround, in menu _Settings \> Toolbars_ you can check again the toolbar

 ![image](https://krita-artists.org/uploads/default/original/3X/1/1/1194383d4f8bc18723fea262c8927873c6951954.png)

I’ve opened a bug:

> <https://github.com/Grum999/BuliCommander/issues/24>
>
> From KA froum: https://krita-artists.org/t/bulicommander/11612/48?u=grum999
> 
> 
> …
> 1) Create a custom toolbar using your plugin, named “Custom”, Icons with no text, with actions of “View as grid” and “View as list”. Hit Okay.
> - Toolbar is visible
> 2) Enter the settings again and hit Okay.
> - Toolbar is hidden
> 
> Workaround:
> In menu \*Settings \> Toolbars\* check toolbar again:
> \<img width="290" alt="image" src="https://user-images.githubusercontent.com/63422799/194773224-76f43e6e-fcbd-4414-822d-71bb472bb95b.png"\>
> 
> It seems a call to settings switch toolbar status to hidden...

I’ll try to fix it tomorrow

Grum999

---

<div class="post-metadata">

**Author:** ![tom](https://krita-artists.org/letter_avatar_proxy/v4/letter/t/3d9bf3/32.png) [@tom](https://krita-artists.org/u/tom)\
**Post date:** [October 19, 2022, 4:51pm UTC](https://krita-artists.org/t/bulicommander/11612/51 "2022-10-19T16:51:22Z")

</div>

I’ve been using it a lot more with the faster startup times.

However, there are times where, when first opening BuliCommander in a longer Krita session, it seems to take something like ~10 seconds to startup, even though it only takes about a second on a fresh session. The feeling resembles that of the cache clearing itself for some reason, but I’m not too sure.

Also, it would be nice if sorting actions were available for the toolbar and right-click menu, so that it isn’t necessary to switch to list view and click a particular column to change what it sorts by.

It would also be nice if there was an option to hide `..` directories, as they can take up some space in grid view at large thumbnail sizes:  
 ![1](https://krita-artists.org/uploads/default/original/3X/b/4/b44a125694cbb5f9395587d24b0f1706cacdd2eb.png)

---

<div class="post-metadata">

**Author:** ![Grum999](https://krita-artists.org/user_avatar/krita-artists.org/grum999/32/66488_2.png) [@Grum999](https://krita-artists.org/u/Grum999)\
**Post date:** [October 20, 2022, 6:58pm UTC](https://krita-artists.org/t/bulicommander/11612/52 "2022-10-20T18:58:36Z")

</div>

Hi @tom

Thanks for feedback! 🙂

> [@tom](#):
>
> I’ve been using it a lot more with the faster startup times.

I still have to publish v0.9.1 official release, I forgot it 😅

> [@tom](#):
>
> However, there are times where, when first opening BuliCommander in a longer Krita session, it seems to take something like ~10 seconds to startup, even though it only takes about a second on a fresh session. The feeling resembles that of the cache clearing itself for some reason, but I’m not too sure.

For that, the best thing you can do to help is [like previously described](https://krita-artists.org/t/bulicommander/11612/40):

- Activate debug mode
- Execute Krita from a console
- Send me returned logs when you see there’s an abnormal execution time, with possibility some information about context…

> [@tom](#):
>
> Also, it would be nice if sorting actions were available for the toolbar and right-click menu

> [@tom](#):
>
> It would also be nice if there was an option to hide `..` directories

That’s interesting and useful features, I’ve created requests here 🙂

> <https://github.com/Grum999/BuliCommander/issues/26>
>
> From KA forum: https://krita-artists.org/t/bulicommander/11612/51?u=grum999
> 
> I…n list view mode, just clikc on list header allows to change sort.
> But in grid view mode, there's no header and then, no possibility to change sort; user have to switch back in list view mode, change sort, and switch back to grid view mode
> Not ideal
> 
> 
> Adding a new sort function available from:
> \- menu \*View \> Sort\* 
> \- context menu \*Sort\*
> 
> With default sub-menu:
> \- Basic 
> - Ascending
> - Filename 
> - File date 
> - File size
> - ... --\> One entry per current available header 
> - Descending
> - Filename 
> - ...
> \- Advanced 
> - Open a dialog box with list similar than one used in search tool, allowing to:
> - re-order fields & define ascending/descending order
> - save/load sort definition (and should be usable from search tool too)
> \<img width="469" alt="image" src="https://user-images.githubusercontent.com/63422799/197033885-21532aed-9ea5-4e8b-813f-97f8dd8ca006.png"\>

> <https://github.com/Grum999/BuliCommander/issues/25>
>
> From KA forum: https://krita-artists.org/t/bulicommander/11612/51?u=grum999
> 
> A…dd an option to not display parent directory \`..\` in grid view mode
> 
> Also needed for list view mode?
> \- Same option for both?
> \- Distinct option for both?
> 
> Add option in \*settings \> navigation\*
> \<img width="678" alt="image" src="https://user-images.githubusercontent.com/63422799/197030698-2196df3f-03b9-4863-96a8-ca98d6a542ad.png"\>
> 
> Add a section "Parent directory" 
> \- List mode: Visible|Hidden \_(list view)\_
> \- Grid mode: Visible|Hidden \_(list view)\_

Can’t say when I’ll be able to find time to implement them but they’re tracked now 😉

> [@Grum999](#):
>
> I’ll try to fix it tomorrow

Concerning this one, I didn’t had time to check it ☹

Grum999

---

<div class="post-metadata">

**Author:** ![Grum999](https://krita-artists.org/user_avatar/krita-artists.org/grum999/32/66488_2.png) [@Grum999](https://krita-artists.org/u/Grum999)\
**Post date:** [October 21, 2022, 8:01pm UTC](https://krita-artists.org/t/bulicommander/11612/53 "2022-10-21T20:01:54Z")

</div>

Hi @tom

> [@Grum999](#):
>
> I’ve opened a bug:
> 
> [https://github.com/Grum999/BuliCommander/issues/24https://github.com/Grum999/BuliCommander/issues/24](https://github.com/Grum999/BuliCommander/issues/24https://github.com/Grum999/BuliCommander/issues/24)
> 
> I’ll try to fix it tomorrow

Fixed it tonight, branch 0.9.1 is up to date on github repository but too tired tonight to create an official relase; I’ll do it this week-end

Grum999

---

<div class="post-metadata">

**Author:** ![Grum999](https://krita-artists.org/user_avatar/krita-artists.org/grum999/32/66488_2.png) [@Grum999](https://krita-artists.org/u/Grum999)\
**Post date:** [October 22, 2022, 7:44am UTC](https://krita-artists.org/t/bulicommander/11612/54 "2022-10-22T07:44:44Z")

</div>

Hi

Release [v0.9.1b](https://github.com/Grum999/BuliCommander/releases/tag/0.9.1b) is available

_[2022-10-22] Version 0.9.1b_

- Improvements:  
– Main interface - _Reduce initialization time & folder analysis_
- Bug fix:  
– Main interface - _Toolbars are hidden_

You can read the [full detailed release content](https://github.com/Grum999/BuliCommander/blob/master/releases-notes/RELEASE-0.9.1b.md) directly on github repository.

It’s a minor release: for screenshots and functionalities description [read v0.9.0b release note](https://github.com/Grum999/BuliCommander/blob/master/releases-notes/RELEASE-0.9.1b.md) and main [BuliCommander](https://github.com/Grum999/BuliCommander) page.

Grum999

---

<div class="post-metadata">

**Author:** ![tom](https://krita-artists.org/letter_avatar_proxy/v4/letter/t/3d9bf3/32.png) [@tom](https://krita-artists.org/u/tom)\
**Post date:** [October 22, 2022, 8:32am UTC](https://krita-artists.org/t/bulicommander/11612/55 "2022-10-22T08:32:25Z")

</div>

Thanks for the patch.

> [@Grum999](#):
>
> Send me returned logs when you see there’s an abnormal execution time, with possibility some information about context…

Here’s one such case:

```auto
DEBUG: BCFileList.execute
DEBUG: ...........................................
DEBUG: Search in paths: [<BCFileListPath('/home/name/Pictures/Art/sketches', False)>]
DEBUG: Found 550 of 742 files in 0.14066338539123535s
DEBUG: - Files: 550
DEBUG: - Directories: 0
DEBUG: Filter 550 files to 550 files in 12.372369050979614s
DEBUG: BCFileList.execute.01-search: 0.14066339
DEBUG: BCFileList.execute.02-filter: 12.37236905
DEBUG: BCFileList.execute.03-result: 0.03150082
DEBUG: BCFileList.execute.04-buildStats: 0.01793504
DEBUG: BCFileList.execute.05-sort: 0.00000906
DEBUG: BCFileList.execute.99-global: 12.56303215
DEBUG: ===========================================

```

This is after spending 30-50 minutes on a sketch, saving once, closing the document, then clicking “Open File”.

---

<div class="post-metadata">

**Author:** ![3deltaangle](https://krita-artists.org/user_avatar/krita-artists.org/3deltaangle/32/123813_2.png) [@3deltaangle](https://krita-artists.org/u/3deltaangle)\
**Post date:** [November 4, 2024, 12:42am UTC](https://krita-artists.org/t/bulicommander/11612/56 "2024-11-04T00:42:19Z")

</div>

Man I love your plugins, they should fit for official updates in my opinion! Unfortunately I’m experiencing this bug…

 ![image](https://krita-artists.org/uploads/default/original/3X/4/3/437f5d1eb9ce4bdbb4d7e5114edd725eb86b747a.png)

Is it from your plugin or did I install it incorrectly? Btw sorry if I’m answering two years late

---

<div class="post-metadata">

**Author:** ![Grum999](https://krita-artists.org/user_avatar/krita-artists.org/grum999/32/66488_2.png) [@Grum999](https://krita-artists.org/u/Grum999)\
**Post date:** [November 4, 2024, 8:55pm UTC](https://krita-artists.org/t/bulicommander/11612/57 "2024-11-04T20:55:27Z")

</div>

Hi

I’m currently over flooded by diapers & others babies things, no time for anything even no time to sleep 😵‍💫

But I took a quick look, it seems on my Windows installation there’s an old WinRAR which wasn’t properly unsinstalled (still present in registry but no executables…) then I didn’t got the error.

If WinRAR is completely removed, the error occurs; same problem with 7Zip

Quick workaround, I’ll try to manage a fix release asap…

1. Ensure to have last plugin version ([Release v0.9.2b · Grum999/BuliCommander · GitHub](https://github.com/Grum999/BuliCommander/releases/tag/0.9.2b))

2. In file `C:\Users\Admin\AppData\Roaming\krita\pykrita\bulicommander\pktk\modules\uncompress.py` (you really use ‘Admin’ user ???) from line 40 replace methods `getUnrar()` and `get7z()` with the following code:

```python
    def getUnrar():
        """return unrar executable full path name as string, None if not found"""
        registryKey = None
        value = None
        try:
            # When installed, WinRAR create this registry key where value "path" can be found
            registryKey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe", 0, winreg.KEY_READ)
            if registryKey:
                value, regtype = winreg.QueryValueEx(registryKey, "Path")
        except:
            value=None

        if registryKey:
            winreg.CloseKey(registryKey)

        if not value is None:
            value=os.path.join(value, "unrar.exe")
            if os.path.isfile(value):
                return value
        return None

    def get7z():
        """return 7z executable full path name as string, None if not found"""
        registryKey = None
        value = None
        try:
            # When installed, WinRAR create this registry key where value "path" can be found
            registryKey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe", 0, winreg.KEY_READ)
            if registryKey:
                value, regtype = winreg.QueryValueEx(registryKey, "Path")
        except:
            value=None

        if registryKey:
            winreg.CloseKey(registryKey)

        if not value is None:
            value=os.path.join(value, "7z.exe")
            if os.path.isfile(value):
                return value
        return None

```

Take care about spaces!!  
(the indentation in provided code here are normally OK)

1. Code should like this at the end:  

2. Then once file is modified, start Krita, and plugin should be ok

Grum999

---

<div class="post-metadata">

**Author:** ![3deltaangle](https://krita-artists.org/user_avatar/krita-artists.org/3deltaangle/32/123813_2.png) [@3deltaangle](https://krita-artists.org/u/3deltaangle)\
**Post date:** [November 4, 2024, 9:31pm UTC](https://krita-artists.org/t/bulicommander/11612/58 "2024-11-04T21:31:45Z")

</div>

No problem, life eventually get us all! I followed what you did and it worked, thank you for the help! And yes I do use that username, cuz I had no idea what to name my user in my new windows installation @.@

---

<div class="post-metadata">

**Author:** ![Birath](https://krita-artists.org/user_avatar/krita-artists.org/birath/32/213338_2.png) [@Birath](https://krita-artists.org/u/Birath)\
**Post date:** [July 19, 2025, 10:14am UTC](https://krita-artists.org/t/bulicommander/11612/59 "2025-07-19T10:14:37Z")

</div>

Anyone got this to work with windows 10? (And with the new updates on krita?)

From what i understand this is mainly tested in Linux, and an older version of Krita?

I have tried to get it to work on my windows 10 w/latest krita, the installation is fine, but when I look in the pyton script-box inside ‘configure krita menue’ I can see it “tagged” but its not white-tagged as the other scripts, its just gray, and non responsive. I can’t even uncheck it.  
Well .. yeah, as you might have understood, its not active or working at all. 🙂

The whole concept/idea sounds soo frikking great and useful thou, but I am no pyton-script coder at all so.. 🤔 I think some one else was talking abouth having the same idea, building a similar manager i meen. don’t recall who it was thou

Anyways, the idea is awsome, to bad I can’t make it work [for.me](http://for.me).

Have a splendid day!!

/carl 🇸🇪🤘🏻

Edit: I think k it was @EyeOdin that had the same thought of building this kinda plug. As a super novis, or as a total noob in this pyton/scripting-thing i presume this kinda plugin, to be working on windows 10 or greater and with latest Krita, is quite a task to build. 😃 Anyways have a great day everyone! ☕

---

<div class="post-metadata">

**Author:** ![Michelist](https://krita-artists.org/user_avatar/krita-artists.org/michelist/32/65826_2.png) [@Michelist](https://krita-artists.org/u/Michelist)\
**Post date:** [July 19, 2025, 10:56am UTC](https://krita-artists.org/t/bulicommander/11612/60 "2025-07-19T10:56:16Z")

</div>

[Here](https://krita-artists.org/t/bulicommander/11612/57) @Grum999 describes how you could repair the plugin yourself.  
But if you don’t like fiddling around in code, you can get the fixed version out of my cloud:

> **[Internxt Drive – Private & Secure Cloud Storage](https://secure.eu.internxt.com/d/sh/file/fd374d80-2eb9-4639-aae1-1d12aa41d2c3/8a9e99e8938b8008aefa62ba7172e1befe434877efcc6c5f204c74571ee7a678)**
>
> Stand for privacy, switch to Internxt. Internxt's open-source cloud storage services, Internxt Drive, Send, and more, protect your right to privacy.

Alternative download location:

> **[2.78 MB file on MEGA](https://mega.nz/file/vkkwwDrD#mzRDQ9EMvExZNEsTdG4pzuMMQPzALaguCnNZQyFWEEw)**

> You install plugins in Krita by clicking on “Tools” \>\> “Scripts” \>\> “Import Plugin from File” and in the dialog that opens, select the file you just downloaded, confirm the selection, then confirm Krita’s message that the plugin is installed and restart Krita. Then you have to search in Krita under ‘‘Settings’’ \>\> ‘‘Configure Krita’’ \>\> ‘‘Python Plugin Manager’’ for the plugin you just installed and activate it by checking the box in front of it. Then confirm with “OK” and restart Krita to be able to use the plugin.

Michelist

Add/Edit: Added an alternative download location.

[Previous page](https://krita-artists.org/t/bulicommander/11612.md?page=2)

[Next page](https://krita-artists.org/t/bulicommander/11612.md?page=4)
