gpt4 book ai didi

c# - CGPDFDocument 和 CGPDFPage 的 MonoTouch CoreGraphics PDF 内存问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:23:31 25 4
gpt4 key购买 nike

我已经使用 MonoTouch 3 周了,一切都很顺利,直到我不得不在我的应用程序中显示 PDF。

使用 Apple 的 Quartz 2D Programming Guide我设法显示了 PDF。

问题是应用程序内存不足。我尝试在 CGPDFDocument 和 CGPDFPage 对象上使用 Dispose() 方法,但随后出现此错误:

Stacktrace:

at (wrapper managed-to-native) MonoTouch.CoreGraphics.CGPDFPage.CGPDFPageRelease (intptr) <0xffffffff>
at MonoTouch.CoreGraphics.CGPDFPage.Dispose (bool) <0x00044>
at MonoTouch.CoreGraphics.CGPDFPage.Finalize () <0x0002b>
at (wrapper runtime-invoke) object.runtime_invoke_virtual_void__this__ (object,intptr,intptr,intptr) <0x0007b>

Native stacktrace:

0 FlapMag1 0x00037514 mono_handle_native_sigsegv + 412
1 FlapMag1 0x0000c010 mono_sigsegv_signal_handler + 348
2 libSystem.B.dylib 0x339927f3 _sigtramp + 34
3 libCGVolute.A.dylib 0x31c83d88 CPModelRelease + 24
4 libCGVolute.A.dylib 0x31c84ad4 model_release + 56
5 CoreGraphics 0x3113ced8 pdf_page_finalize + 68
6 CoreFoundation 0x3388fae9 _CFRelease + 168
7 CoreFoundation 0x3388f9c7 CFRelease + 66
8 CoreGraphics 0x3113ce90 CGPDFPageRelease + 20
9 FlapMag1 0x00248cc0 wrapper_managed_to_native_MonoTouch_CoreGraphics_CGPDFPage_CGPDFPageRelease_intptr + 64
* Assertion: should not be reached at ../../../../mono/mini/mini-darwin.c:258

这慢慢地让我发疯,因为我尝试了我能想到的一切。

在 Apple 的示例中有 CGPDFDocumentRelease 和 CGPDFPageRelease,但 MonoTouch 中没有这些。因此我认为 MT 会自动管理这些对象,但显然它没有或者它有错误。

即使我没有弄乱 CGPDF 对象的 Dispose(),当我从 super View 中删除包含 PDF 的 View 时,也会发生上述错误。

有人能够在 MonoTouch 中处理 PDF 吗?

提前致谢。

更新:
我用相同的 PDF 在 Obj-C 中测试了 PDF 绘图,发现当我不调用 CGPDFDocumentRelease() 时,内存消耗与在 MonoTouch 中一样有快速上升的趋势。通过在 Obj-C 中调用 CGPDFDocumentRelease() 内存消耗是正常的。
因此,我认为 MonoTouch 确实没有释放 CGPDFDocument 和 CGPDFPage 对象,当我尝试手动或间接释放它们时(通过删除包含它们的 View ),我得到了上述错误。

这太糟糕了,现在很有可能,我必须用 Obj-C 重写代码 ... F$#k!!

另一项更新:
我仍然无法解释为什么我会收到与发布相关的错误,但我制作了一个 MonoTouch 和一个 XCode 项目,两者基本上做同样的事情:绘制 PDF。
我在 Activity Monitor 中比较了两者的内存使用情况,发现虽然 MonoTouch 应用程序不断增加内存使用量,但 XCode 应用程序却没有。我什至在 MonoTouch 中的 CGPDFDocument 对象上调用 Dispose(),但内存消耗仍然增加。
这两个应用程序都没有因发布相关错误而崩溃,但 MonoTouch 应用程序中的内存使用量如此之大确实令人担忧......

我认为我的问题出在其他地方,但我之所以来到这里是因为我的主应用程序在内存消耗过高后崩溃了,而且我似乎找不到解决它的方法,因为我遇到了这些恼人的发布错误。

和另一个更新:
在 View 的 Draw() 方法中绘制 pdf 的代码:

CGContext context = UIGraphics.GetCurrentContext();

context.SaveState();

CGPDFDocument pdfDoc = CGPDFDocument.FromUrl(_pdfFileUrl);
if(pdfDoc.Pages >= 1)
{
CGPDFPage pdfPage = pdfDoc.GetPage(1);

context.ScaleCTM(SCALE.Width, SCALE.Height);
// the PDFRectangle is the media box rect of the page, which is hardcoded
// for now
context.TranslateCTM(-this.PDFRectangle.X, -this.PDFRectangle.Height - this.PDFRectangle.Y);

context.DrawPDFPage(pdfPage);
}

pdfDoc.Dispose();

context.RestoreState();

最佳答案

这是由 MonoTouch Alpha 中的错误引起的,该错误将在 1.9.3 版本中修复

关于c# - CGPDFDocument 和 CGPDFPage 的 MonoTouch CoreGraphics PDF 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com