Litss,
I suspect your long wait may be due to another coding issue altogether.
Using similar code on a slow workstation I'm processing 20,000 faces in less than a second.
(defun c:EXPORT-SURFACE ( / ent ss tmp c nfile start en elst p1 p2 p3 str)
(if (and (setq ent (car (entsel "\nPick 3D Surface >")))
(setq ss (ssget "X" (list (cons 0 "3DFACE")(cons 8 (cdr (assoc 8 (entget ent)))))))
(if tinout
(setq tmp (getfiled "Export 3D Surface to file" tinout "TIN" 1))
(setq tmp (getfiled "Export 3D Surface to file" "" "TIN" 1))
)
)
(progn
(setq tinout tmp c -1 nfile (open tinout "w") start (getvar "DATE"))
(repeat (sslength ss)
(setq en (ssname ss (setq c (1+ c))) elst (entget en))
(setq p1 (cdr (assoc 10 elst)) p2 (cdr (assoc 11 elst)) p3 (cdr (assoc 12 elst)))
(setq str (strcat (rtos (car p1) 2 3) "," (rtos (cadr p1) 2 3) "," (rtos (caddr p1) 2 3) ","
(rtos (car p2) 2 3) "," (rtos (cadr p2) 2 3) "," (rtos (caddr p2) 2 3) ","
(rtos (car p3) 2 3) "," (rtos (cadr p3) 2 3) "," (rtos (caddr p3) 2 3)))
(write-line str nfile)
)
(princ (strcat "\rExport Complete - Elapsed time: " (rtos (* 86400.0 (- (getvar "date") start)) 2 2) " secs."))
(close nfile)
)
)
(princ)
)