Copy link to clipboard
Copied
I do work that involves batch processing of several hundreds or even thousands of EPS illustrations. During one round of processing, I started getting "Out of memory" errors. Windows Task Manager indeed showed Illustrator taking up all available memory. With some sleuthing, I pinpointed the problem to a call to the 'paragraphs' property of TextFrameItem.
The code looks like the following:
for (var i = 0; i < fileList.length; i++) {
var aiDoc = open(new File(fileList));
// Do some stuff
// ...
// Check paragraphs
for (var j = 0; j < aiDoc.textFrames.length; j++) {
var pObj = aiDoc.textFrames
for (...) {
var p = pObj
// Do some paragraph stuff
}
}
}
If I eliminate the part that accesses 'paragraphs', so leak occurs. But even just adding the var pObj = ... statement immediately sent Illustrator into a memory feeding frenzy.
Does anyone have any experience with this? Any mitigations? Does Adobe have a bug reporting system?
It occurs on both CS6 and CC versions of Illustrator. As in the title, the 'characters' property seems to have a similar leaking effect.
Thanks!
Copy link to clipboard
Copied
memory issues are a problem indeed.
does processing 1 file gets illustrator into a memory feeding frenzy? or does it only happen when you process thousands of files?
Copy link to clipboard
Copied
That's a good question. For the processing in question, doing one file doesn't seem to affect memory much. Most files have on the order of 10s (maybe as many as 100) text frames, and each one's paragraph property is accessed. But looking at Task Manager during this process doesn't show any particularly large increase in memory allocation.
What happens is:
Normally, step 3 returns the amount of memory allocated to Illustrator to roughly where it was before the file was opened.
Copy link to clipboard
Copied
ok, great. All variables get saved to a single scripting session so they accumulate and choke illustrator overtime. It is recommended to restart illustrator often to restore the memory cache. Illustrator is not able to process thousands of files, Adobe recommends processing about 500 files on Windows before needing to restart. If you're on mac, I think the limit is higher but in real life illustrator might crash processing less than 100 complicated files or it might easily process over 1000 files without issues if the files are simple. It totally depends on what's on the files. Trial an error to find a safe number of files to process.
so, you can limit the number of files to process in a single session. Restart often.
some have suggested processing the files and leave them open, then at the end close them all.
also, I've found that taking your variable declarations out of your loops helps a lot
instead of
for (var a=0.....) {
var docRef = .....
}
do this
var docRef;
for (var a=0...) {
docRef = .....
}
Copy link to clipboard
Copied
Thanks for your reply.
In practice, dividing up the workload is exactly what we do, but obviously this is not the ideal solution.
As for leaving files open, probably not practical with several hundred. Also, the largest memory allocations occurred when opening the files, so not closing them would exacerbate the problem in my case.
As I implied, the only scripts where we encounter any actual problems are those that access paragraphs and characters properties (though there may be more, of course).
Though Illustrator scripting has gotten better over the years, it's obvious that it's not Adobe's priority. Just look at all the typos in the JavaScript documentation! (Which, I would be willing to offer feedback if I knew whom to contact )
Thanks again, though. Again if there's a bug reporting mechanism I'd love to know about it.
Copy link to clipboard
Copied
there is one, post your queries here
Copy link to clipboard
Copied
One workaround to this issue I found is that while
.paragraphs[k].lines.length
leaks, the following do not
.paragraphs.length
.paragraphs[k].contents
for my use case, I was able to use these instead.