'Write-line' slow in Acad2024 - performance test

'Write-line' slow in Acad2024 - performance test

Azijtveld
Contributor Contributor
825 Views
11 Replies
Message 1 of 12

'Write-line' slow in Acad2024 - performance test

Azijtveld
Contributor
Contributor

I noticed that my lisp routines in Acad2024 are much slower than in Acad2020. The problem seems to be in the Write-line function. I tested the code below in both AutoCAD versions and the results are shocking: Acad2000 in 0.5sec and Acad2024 in 41sec. Does anyone know why?

 

(defun c:performancetest ( / count loc tempfile times)
 (vl-load-com)
 (prompt (ver))
 (setq count 0)
 (if (setq tempfile (open (setq loc (vl-filename-mktemp "test.csv")) "w"))
  (progn
   (setq times (getvar "millisecs"))
   (while (< count 100001)
    (write-line (strcat "data;" (itoa count)) tempfile)
    (if (member count (list 5000 10000 15000 20000 25000 30000 35000 40000 45000 50000 55000 60000 65000 70000 75000 80000 85000 90000 95000 100000))
     (prompt (strcat "\nSplit time " (itoa count) " = " (rtos (* (- (getvar "millisecs") times) 0.001) 2 3) " sec. "))
    )
    (setq count (+ 1 count))
   )
   (close tempfile)
  )
 )
 ;;(openfile (findfile loc))
 (princ)
)

 Output 2020

Command: PERFORMANCETEST
Visual LISP 2020 (en)
Split time 5000 = 0.047 sec.
Split time 10000 = 0.063 sec.
Split time 15000 = 0.094 sec.
Split time 20000 = 0.109 sec.
Split time 25000 = 0.141 sec.
Split time 30000 = 0.172 sec.
Split time 35000 = 0.188 sec.
Split time 40000 = 0.203 sec.
Split time 45000 = 0.234 sec.
Split time 50000 = 0.250 sec.
Split time 55000 = 0.297 sec.
Split time 60000 = 0.313 sec.
Split time 65000 = 0.344 sec.
Split time 70000 = 0.359 sec.
Split time 75000 = 0.375 sec.
Split time 80000 = 0.406 sec.
Split time 85000 = 0.422 sec.
Split time 90000 = 0.453 sec.
Split time 95000 = 0.469 sec.
Split time 100000 = 0.500 sec.

 Output 2024

Command: PERFORMANCETEST
Visual LISP 2024 (en)
Split time 5000 = 0.078 sec.
Split time 10000 = 0.234 sec.
Split time 15000 = 0.500 sec.
Split time 20000 = 0.844 sec.
Split time 25000 = 1.281 sec.
Split time 30000 = 1.828 sec.
Split time 35000 = 2.484 sec.
Split time 40000 = 3.250 sec.
Split time 45000 = 4.266 sec.
Split time 50000 = 6.484 sec.
Split time 55000 = 8.922 sec.
Split time 60000 = 11.562 sec.
Split time 65000 = 14.437 sec.
Split time 70000 = 17.516 sec.
Split time 75000 = 20.875 sec.
Split time 80000 = 24.422 sec.
Split time 85000 = 28.219 sec.
Split time 90000 = 32.266 sec.
Split time 95000 = 36.531 sec.
Split time 100000 = 40.984 sec.

  

0 Likes
Accepted solutions (2)
826 Views
11 Replies
Replies (11)
Message 2 of 12

-didier-
Advisor
Advisor

Bonjour @Azijtveld 

 

interesting.

I don’t have 2020 to test, but I reproduced on 2021 and 2024 and the results are identical.

By cons I tested with MAP and Civil and there the results vary.

Would be due to a processor load independent of AutoCAD or something else but in AutoCAD(exe)?

 

I will follow this topic to stay informed.

 

Amicalement

 

Éternel débutant.. my site for learning : Programmer dans AutoCAD

DA

EESignature

Message 3 of 12

john.uhden
Mentor
Mentor
Accepted solution

@Azijtveld ,

Maybe @-didier- has a valid idea there.

Meanwhile, I would suggest trying an alternate method...

(princ (strcat "\ndata; " (itoa count)) tempfile)

and timetest it.

John F. Uhden

Message 4 of 12

Sea-Haven
Mentor
Mentor

My V20 Bricscad, it has the temp directory point to my 😧 drive which is a normal 1tb drive.

C:PERFORMANCETEST
: PERFORMANCETEST
LispEx : Version 20.0 (x64) (en)
Split time 5000 = 0.016 sec. 
Split time 10000 = 0.047 sec. 
Split time 15000 = 0.078 sec. 
Split time 20000 = 0.109 sec. 
Split time 25000 = 0.141 sec. 
Split time 30000 = 0.172 sec. 
Split time 35000 = 0.187 sec. 
Split time 40000 = 0.203 sec. 
Split time 45000 = 0.234 sec. 
Split time 50000 = 0.250 sec. 
Split time 55000 = 0.266 sec. 
Split time 60000 = 0.266 sec. 
Split time 65000 = 0.281 sec. 
Split time 70000 = 0.297 sec. 
Split time 75000 = 0.297 sec. 
Split time 80000 = 0.297 sec. 
Split time 85000 = 0.312 sec. 
Split time 90000 = 0.328 sec. 
Split time 95000 = 0.328 sec. 
Split time 100000 = 0.328 sec. 

Ok to my SSD

: PERFORMANCETEST
LispEx : Version 20.0 (x64) (en)
Split time 5000 = 0.000 sec. 
Split time 10000 = 0.031 sec. 
Split time 15000 = 0.046 sec. 
Split time 20000 = 0.062 sec. 
Split time 25000 = 0.093 sec. 
Split time 30000 = 0.093 sec. 
Split time 35000 = 0.109 sec. 
Split time 40000 = 0.125 sec. 
Split time 45000 = 0.140 sec. 
Split time 50000 = 0.156 sec. 
Split time 55000 = 0.156 sec. 
Split time 60000 = 0.156 sec. 
Split time 65000 = 0.171 sec. 
Split time 70000 = 0.171 sec. 
Split time 75000 = 0.171 sec. 
Split time 80000 = 0.187 sec. 
Split time 85000 = 0.187 sec. 
Split time 90000 = 0.187 sec. 
Split time 95000 = 0.203 sec. 
Split time 100000 = 0.203 sec. 

Did you get a new PC ?

Message 5 of 12

vladimir_michl
Advisor
Advisor

Cannot confirm that. Tested AutoCAD 2020 and AutoCAD 2024 on a rather slow PC, SSD and the results are identical, about 1.3 sec at the 100000 split. Are there any other apps, reactors, add-ons running in your ACAD 2024? Antivirus settings? TEMP folder settings?

 

Vladimir Michl, www.arkance-systems.cz  -  www.cadforum.cz

 

Message 6 of 12

ВeekeeCZ
Consultant
Consultant
Accepted solution

It's LISPSYS sysvar setting that makes this significant difference.

Message 7 of 12

-didier-
Advisor
Advisor

Bonjour @ВeekeeCZ 

 

Could you expand on what you said about LISPSYS?

Is there a way to improve behavior with another variable?

 

Amicalement

Éternel débutant.. my site for learning : Programmer dans AutoCAD

DA

EESignature

Message 8 of 12

vladimir_michl
Advisor
Advisor

Good catch. I can understand that the added Unicode handling adds some overhead, but that much?! My test slowed down from 1.3 secs to 61 secs for the last iteration. Looks like a bug or poor implementation. But another reason to keep LISPSYS at 0 if possible.

 

Vladimir Michl, www.arkance-systems.cz  -  www.cadforum.cz

Message 9 of 12

Azijtveld
Contributor
Contributor

Thank you. I set LISPSYS to 0 and now the problem is solved. Write-line is now much faster.

Command: PERFORMANCETEST
Visual LISP 2024 (en)
Split time 5000 = 0.032 sec.
Split time 10000 = 0.063 sec.
Split time 15000 = 0.094 sec.
Split time 20000 = 0.125 sec.
Split time 25000 = 0.157 sec.
Split time 30000 = 0.172 sec.
Split time 35000 = 0.203 sec.
Split time 40000 = 0.235 sec.
Split time 45000 = 0.266 sec.
Split time 50000 = 0.297 sec.
Split time 55000 = 0.328 sec.
Split time 60000 = 0.344 sec.
Split time 65000 = 0.375 sec.
Split time 70000 = 0.407 sec.
Split time 75000 = 0.422 sec.
Split time 80000 = 0.453 sec.
Split time 85000 = 0.485 sec.
Split time 90000 = 0.516 sec.
Split time 95000 = 0.547 sec.
Split time 100000 = 0.578 sec.
0 Likes
Message 10 of 12

komondormrex
Mentor
Mentor

using princ or prin1 insead of write-line can significantly decrease writing file time with lispsys set to 1.

Message 11 of 12

-didier-
Advisor
Advisor

Bonjour @ВeekeeCZ 

 

Thank you, indeed there is a real difference in working time depending on whether LISPSYS is 0 or 1.

Surprising! Not to say tired of the novelties that slow down work.

 

Amicalement

Éternel débutant.. my site for learning : Programmer dans AutoCAD

DA

EESignature

Message 12 of 12

Azijtveld
Contributor
Contributor

Thank you... I just tested it: 'princ' is even faster then 'write-line' and LISPSYS has no influence on it, whether it is set to 1 or 0.

 

100000 lines of 'princ'  (with LISPSYS=0 or 1) -> between 0,39sec - 0,43sec on average

100000 lines of 'write-line' (with LISPSYS=0) -> between 0,56sec - 0,61sec on average

100000 lines of 'write-line' (with LISPSYS=1) -> between 38,0sec - 41,0sec on average

 

 

 

Command: PERFORMANCETEST
Visual LISP 2024 (en)
Split time 5000 = 0.016 sec.
Split time 10000 = 0.047 sec.
Split time 15000 = 0.063 sec.
Split time 20000 = 0.078 sec.
Split time 25000 = 0.109 sec.
Split time 30000 = 0.125 sec.
Split time 35000 = 0.141 sec.
Split time 40000 = 0.156 sec.
Split time 45000 = 0.188 sec.
Split time 50000 = 0.203 sec.
Split time 55000 = 0.219 sec.
Split time 60000 = 0.234 sec.
Split time 65000 = 0.266 sec.
Split time 70000 = 0.281 sec.
Split time 75000 = 0.313 sec.
Split time 80000 = 0.328 sec.
Split time 85000 = 0.344 sec.
Split time 90000 = 0.375 sec.
Split time 95000 = 0.391 sec.
Split time 100000 = 0.406 sec.

 

 

 

0 Likes