C# PDFTron内存泄漏缩放
我和PDFTron一起工作,它可以很好地和PDF一起工作。我用xamarin制作了一个应用程序,人们可以在其中打开很多pdf文件进行签名。这也很好用 但是,当放大和缩小时,问题就开始了。然后,记忆突然开始填满。放大几个文档后,应用程序崩溃 有人知道发生了什么吗 这是所有魔术发生的活动: 初始化PDFViewCtrl 当按下backbutton时 保存文档 设置Pdf视图 简历上 论毁灭 处置 关于低内存C# PDFTron内存泄漏缩放,c#,android,xamarin,memory-leaks,pdftron,C#,Android,Xamarin,Memory Leaks,Pdftron,我和PDFTron一起工作,它可以很好地和PDF一起工作。我用xamarin制作了一个应用程序,人们可以在其中打开很多pdf文件进行签名。这也很好用 但是,当放大和缩小时,问题就开始了。然后,记忆突然开始填满。放大几个文档后,应用程序崩溃 有人知道发生了什么吗 这是所有魔术发生的活动: 初始化PDFViewCtrl 当按下backbutton时 保存文档 设置Pdf视图 简历上 论毁灭 处置 关于低内存 你应该尝试创建一个最小的代码示例来解决这个问题,如果我知道坏事情发生在哪里的话。你已经调试过
你应该尝试创建一个最小的代码示例来解决这个问题,如果我知道坏事情发生在哪里的话。你已经调试过代码了吗?我已经把它转发给了Xamarin。这里的Android团队,但与此同时,你使用的是什么版本的PDFNet?您可以调用PDFNet.getVersion。您尝试的任何设备上是否也存在泄漏?还是仅限于某些问题?请联系支持团队,创建并向我们发送允许我们重现问题的最低代码示例。谢谢
private PDFViewCtrl _mPdfViewCtrl;
SetupViewer(filePath);
public override void OnBackPressed()
{
base.OnBackPressed();
_syncManager = null;
DisposePdfCtrl();
Finish();
}
_mPdfViewCtrl.Doc.Save(filePath, 0);
private void SetupViewer(string filePath)
{
try
{
PDFNet.SetDefaultDiskCachingEnabled(true);
PDFNet.SetViewerCache(100 * 1024 * 1024, false);
}
catch (pdftron.Common.PDFNetException ex)
{
Logger.log(Title, "Failed to setup viewer");
}
try
{
Logger.log(Title, $"Setting up pdf viewer");
SetContentView(Resource.Layout.PdfView);
var toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(toolbar);
SupportActionBar.Title = "Sign Document";
Logger.log(Title, $"Toolbar is setup.");
_mPdfViewCtrl = FindViewById<PDFViewCtrl>(Resource.Id.pdfviewctrl);
_mPdfViewCtrl.PagePresentationMode = PDFViewCtrl.PagePresentationModes.e_single_page;
_mPdfViewCtrl.PageViewMode = PDFViewCtrl.PageViewModes.e_fit_page;
_mPdfViewCtrl.PageRefViewMode = PDFViewCtrl.PageViewModes.e_fit_page;
_mPdfViewCtrl.SetHighlightFields(true);
Logger.log(Title, $"Opening file in viewer: {filePath}");
var docToOpen = new PDFDoc(filePath);
docToOpen.InitStdSecurityHandler("");
if (!_allowChange)
{
docToOpen.FlattenAnnotations();
}
Logger.log(Title, "setting file to pdf viewer");
_mPdfViewCtrl.Doc = docToOpen;
var toolManager = new ToolManager(_mPdfViewCtrl);
Logger.log(Title, "setting file to pdf viewer");
_mPdfViewCtrl.ToolManager = toolManager;
}
catch (Exception ex)
{
Logger.log(Title, $"Error while setting up pdf view: {ex.Message}");
}
}
protected override void OnPause()
{
base.OnPause();
DisposePdfCtrl();
}
protected override async void OnResume()
{
base.OnResume();
try
{
if (!_busy)
{
_mPdfViewCtrl?.Resume();
}
}
catch (ObjectDisposedException)
{
SetupViewer(filePath);
}
}
protected override void OnDestroy()
{
base.OnDestroy();
DisposePdfCtrl();
}
bool disposed = false;
private void DisposePdfCtrl()
{
if (_disposing)
return;
_disposing = true;
if (disposed) return;
try
{
var oldTool = _mPdfViewCtrl.ToolManager;
var oldDoc = _mPdfViewCtrl.Doc;
_mPdfViewCtrl.Doc.Unlock();
_mPdfViewCtrl?.PurgeMemory();
_mPdfViewCtrl?.CloseDoc();
_mPdfViewCtrl?.CloseTool();
oldDoc?.Dispose();
oldTool?.Dispose();
_mPdfViewCtrl?.Dispose();
_mPdfViewCtrl = null;
_syncManager = null;
GC.Collect();
this.Dispose();
} catch (Exception ex)
{
}
disposed = true;
_disposing = false;
}
public override void OnLowMemory()
{
base.OnLowMemory();
Logger.log(Title, "Low on memory");
_mPdfViewCtrl?.PurgeMemory();
}