How can I configure PDFTron library to use less memory for low-end Windows Phone devices?
There are a few places where you can control the amount of space the PDFViewCtrl can occupy. Note that the OS alone will use up a lot of memory just having content in a scroll viewer (which is what PDFViewCtrl is using under the hood).
pdftron.PDFNet.SetViewerCache tell the whole SDK how much space can be used to cache parsed content from PDF documents for quicker rendering. In PDFViewCtrlDemo, this is set in App.xaml.cs to 0, which means it’s not used at all. On low memory devices, if you want a cache at all, you probably should enable dish caching (setting the second parameter to true.
PDFViewCtrl.SetUpThumbnails controls how PDFNet stores thumbnails. Similar to SetViewerCache, I would recommend enabling disc caching (3rd boolean, using persistent cache) if you use any cache at all, otherwise it will store it all in memory. In the case of the PDFViewCtrlDemo, we are using thumbs and giving it 100MB to store stuff on disk, which should be fine. You can turn off thumbnails completely by using PDFViewCtrl.SetupThumbnails(false, false, false, 0, 0, 0);
The final option is PDFViewCtrl.SetRenderedContentCacheSize. This controls how much content the PDFViewCtrl will pre-render. Do note that this is in terms of MBs worth of image data. With content going inside the PDFViewCtrl, the operating system will cache some stuff in memory. This seems to be what goes wrong with the PDFViewCtrl demo on low memory devices.
Running our demo on the 512MB emulator, I found that passing 12 to PDFViewCtrl.SetRenderedContentCacheSize seems to make it work fine.
Both SetUpThumbnails and SetRenderedContentCacheSize are set in the constructor of MainPageViewModel.