Hello, I'm opening this ML thread based on the following two forum discussions, none of which have yielded much resolution yet: http://en.libreofficeforum.org/node/9850 https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=74332 To summarize: I run an office instance locally, headless, as a listener. Using Python and UNO I connect to that office instance, load a test document, and iterate over its paragraphs. On my Mac this takes 1.5s while on Linux it takes about 45s, a severe degradation in performance. I could reproduce this across three different Linux machines now consistently (Gentoo, Ubuntu). The test document and Python script are attached to both forum discussions, and to this email. I have not yet started a more thorough profiling of the office instance, hoping that raising this issue to the developers might solve the problems. Thanks! Jens -- Jens Tröger http://savage.light-speed.de/
Attachment:
lorem.odt
Description: application/vnd.oasis.opendocument.text
import socket import errno import subprocess import time import uno import os if __name__ == "__main__" : def check_socket() : print("Trying to connect to office socket.") sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = sock.connect_ex(("localhost", 2002)) if not result : print("Connected to office socket, closing test connection.") sock.shutdown(socket.SHUT_RDWR) else : print("Failed to connect to office socket (" + str(result) + ": " + errno.errorcode[result] + ").") sock.close() return result # # # myenv = os.environ.copy() #myenv["DISPLAY"] = "" # --headless --accept="socket,host=localhost,port=2002,tcpNoDelay=1;urp" --nodefault --nofirststartwizard --nolockcheck --nologo --norestore --invisible p = subprocess.Popen("soffice --accept=\"socket,host=localhost,port=2002;urp;StarOffice.ServiceManager\" --headless", shell=True, env=myenv) print("Spawning office instance pid=" + str(p.pid)) while True : # BUGBUG Ought to be a countdown, not an infinite loop! time.sleep(2) if not check_socket() : break # # # local = uno.getComponentContext() resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local) context = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext") desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context) document = desktop.loadComponentFromURL("file://" + os.path.abspath("lorem.odt"), "_blank", 0, ()) start_time = time.time() parenum = document.Text.createEnumeration() while parenum.hasMoreElements() : par = parenum.nextElement() end_time = time.time() print("Elapsed time: " + str(end_time - start_time)) p.terminate()