We’re currently using Aspose.Slides Java in a batch process that crawls about 470K data sources, about 70K of those sources contain PPT presentations and for each one we’re generating thumbnail images of the slides. After adding aspose to the process we’ve found that the duration the batch process executes has been increased 10 fold and consumes all memory and CPU of our server. We found it takes anywhere from 7 to 11 seconds for Aspose to process the PPT presentation and 50 to 500 milliseconds to create a thumbnail for each slide and it gets exponentially slower after it executes bringing the server to a hault. Is this in the range of expected performance? and is there any server/hardware/software configurations that can improve what we’re experiencing?
I have observed the information shared by you and like to share that the amount of memory required to load presentation and time in generating slide thumbnail is dependent of many factors which include size of presentation, number of slides inside presentation and content inside presentation especially multimedia content. Please note that when you load the Presentation object for the first time it loads all statics inside memory and based on presentation size the presentation gets loaded in Document Object Model (DOM) of Aspose.Slides. In order to improve presentation loading to an extent, you can use the same Presentation object to load the next presentation that you have used to load a presentation before. Apart from these there is no software or hardware configurations that can be adopted to improve performance on your end.
One more point is concerning to Java heap size that you can set based on maximum presentation size that you have in your batch.
Thanks for the input! Is there any chance you have a code snippet example of how to reuse the Presentation object?
I meant following implementation.
Presentation pres=new Presentation("Test1.pptx"); pres=new Presentation("newpresentation.pptx");
I’m a developer in that current team. Hmm… I don’t think having a presentation class loaded like that would work, because we are currently working in a multi-threaded environment… When the thread process a powerpoint it continues the processing workflow until it finishes. And you know… Meanwhile there are other threads running the same piece of code. Is there any way we can improve the time the presentation loads in a multi-threaded environment?
As per my earlier comments regarding re-using the Presentation class object to load a new presentation file may save the time required to load statics and DOM in memory that is required for every new presentation loading. For your point concerning to improving the memory and time loading for presentation, I have shared before as well that it depends on many factors including size of presentation, number of slides, number of shapes especially tables, charts and multimedia contents inside presentation. Moreover, when you render the loaded presentation to PDF or slide images, the generated output is held in memory as well and rendering time too depends on presentation file.
If you feel that for any of your presentation deck Aspose.Slides is taking more than normal time, please feel free to share the working sample project along with source presentation, statistics achieved on your end along with Java and Operating system details. We may investigate the same for you on our end if the time and resources consumed by API are normal or is there any area of improvement that we may consider.