加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net-3.5 – TargetInvocationException:Microsoft.AGL.Common.

发布时间:2020-12-14 05:25:33 所属栏目:Windows 来源:网络整理
导读:在我的.NET Compact Framework 3.5项目(在 Windows Mobile 6上运行)中加载Resources时,我会随机获得TargetInvocationException.它们看起来与此堆栈跟踪类似: FATAL 2012-11-13 14:17:00,657 [23768895] TargetInvocationException - mobileX.MIP.Post.Prese
在我的.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.

无论如何,我会考虑确保您没有泄漏资源或句柄,并仔细检查您的流是否格式正确.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读