.net-3.5 – TargetInvocationException:Microsoft.AGL.Common.
在我的.NET Compact Framework 3.5项目(在
Windows Mobile 6上运行)中加载Resources时,我会随机获得TargetInvocationException.它们看起来与此堆栈跟踪类似:
FATAL 2012-11-13 14:17:00,657 [23768895] TargetInvocationException - mobileX.MIP.Post.Presentation.Program System.Reflection.TargetInvocationException: TargetInvocationException ---> System.Exception: Exception at Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar) at System.Drawing.Bitmap._InitFromMemoryStream(MemoryStream mstream) at System.Drawing.Bitmap..ctor(Stream stream) at System.Reflection.RuntimeConstructorInfo.InternalInvoke(RuntimeConstructorInfo rtci,BindingFlags invokeAttr,Binder binder,Object parameters,CultureInfo culture,Boolean isBinderDefault,Assembly caller,Boolean verifyAccess,StackCrawlMark& stackMark) at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr,Object[] parameters,CultureInfo culture) at System.Reflection.ConstructorInfo.Invoke(Object[] parameters) at System.Resources.ResourceReader.CreateResource(Type objType,Type[] ctorParamTypes,Object[] ctorParameters) at System.Resources.ResourceReader.LoadBitmap(Int32 typeIndex) at System.Resources.ResourceReader.LoadObjectV2(Int32 pos,ResourceTypeCode& typeCode) at System.Resources.ResourceReader.LoadObject(Int32 pos,ResourceTypeCode& typeCode) at System.Resources.RuntimeResourceSet.GetObject(String key,Boolean ignoreCase) at System.Resources.ResourceManager.GetObject(String name,CultureInfo culture) 我猜这个例外的原因是有一些我忘了清理的非托管资源.但是,我在项目中有很多表单和资源. 所以这是我的问题: >未清理的表单或资源是否可能是此例外的原因? 关于2:我已经使用.NET Compact Framework Power Toys 3.5中的CLR Profiler描述了我的应用程序.大量内存转到“NATIVE FUNCTION”/ System.Windows.Forms.Control :: _ InternalWnProc Microsoft.AGL.Common.PAL_ERROR(Microsoft.AGL.Forms.WM int32 int32).但是,我无法看到这些资源的使用位置.我该怎么知道? 解决方法
>是的
>我希望(甚至不要声称电动玩具探测器会帮助你) 您将不得不检查您的代码.确保在所有Disposable对象上调用Dispose,包括所有GDI对象,位图,画笔. 其次,如果你曾经调用过Font.ToHFont,这个调用非常危险,因为它需要你调用/调用DeleteObject来清理它. (托管调用需要p / invoke才能泄漏资源) 我唯一的建议是,出于某种原因,大多数时候我的AGL错误发生在问题的根源附近.我不记得具体的原因.在工作中,我们称之为无证件的“加速悲伤层(AGL)” 最后,我还有一个更有针对性的问题.您是一次分配大量位图,然后释放它们,最后尝试创建托管内存对象,也许是缓冲区? Windows Mobile 6是基于Windows CE 5.0而不是Windows CE 6.0构建的.因此,每个进程的内存限制为32 MB.如果一次分配大量位图,它们会增加非托管堆的大小.当你处理位图时,会调用LocalFree并且堆decommit’s但不释放内存,.NET将永远不会再看到它.除了避免一次分配大量位图之外,避免这种情况的唯一方法是分配大于或等于96 KB的位图,该位图保留堆外的页面. 可能怀疑这是你的问题,但我会提到它,因为它几乎不可能追查.但是,我想你最终会遇到崩溃或OutOfMemoryException. 无论如何,我会考虑确保您没有泄漏资源或句柄,并仔细检查您的流是否格式正确. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows – 调试可怕的’应用程序无法初始化’错误
- windows-server-2012 – 删除标记为已退役的物理磁盘时出错
- 是默认情况下能够处理vista / win7 UAC的delphi 2010程序
- 预定任务 – Windows Server 2016计划任务计划必须在将来使
- windows-server-2008-r2 – 如何配置使用Windows Server 20
- 如何使用GUI独立于.NET或其他Libs为Windows制作便携式C程序
- 有关在Windows Server 2012 R2中通过奇偶校验存储空间池手动
- active-directory – 将Windows Server 2016提升为Server 2
- 部署 – 如何将Windows-8企业应用程序部署到其他用户?
- windows – 确定磁盘块级别的更改