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

c# – 如何避免.NET CF 3.5和CE 6 R3中出现严重错误

发布时间:2020-12-15 21:50:35 所属栏目:百科 来源:网络整理
导读:当我在带有附加调试器的设备上启动此示例程序时,会发生严重错误. 这是我们实际应用程序中发生的简化版本. 我发现的是: 必须附加调试器 内存必须以某种方式填充(我认为这将强制垃圾收集) 垃圾(位图)对象必须存在.其他对象可能会导致相同的错误 必须显示一个
当我在带有附加调试器的设备上启动此示例程序时,会发生严重错误.

这是我们实际应用程序中发生的简化版本.

我发现的是:

>必须附加调试器
>内存必须以某种方式填充(我认为这将强制垃圾收集)
>垃圾(位图)对象必须存在.其他对象可能会导致相同的错误
>必须显示一个表单(如果使用Application.Run()或ShowDialog则没有区别)

然后,当表单可见并且GC收集位图时,会发生严重错误.

我正在使用.NET Compact Framework 3.5运行WindowsCE 6 R3.

static class Program {

    static void Main() {
        // Fill up memory - Depends on device
        var memory = new int[100000 * 150];

        // Settings the priority higher will raise the error earlier.
        // With Priority set to Normal the EXE won't get freed correct.
        // Without this line i have to reboot the CE after every test run...
        Thread.CurrentThread.Priority = ThreadPriority.Highest;

        // 80 is just random choosen. The error occurs also with 30 Bitmaps...
        for (int o = 1; o < 80; o++) {
            // Create a Bitmap and don't free it manually. The
            // The garbage collector will take care of it :)
            var bitmap = new Bitmap(100,100);

            // When i dispose the Bitmap,everything works fine...
            //bitmap.Dispose();
        }

        // Force a GC run
        System.Diagnostics.Debug.WriteLine(GC.GetTotalMemory(true));

        // Then error occurs when the form is shown.
        System.Windows.Forms.Application.Run(new System.Windows.Forms.Form());
    }
}

我已经找到了类似的问题,但没有回答……

> How to debug a fatal error that happens after calling Application.Exit() in .NET CF 3.5 WinForms application for Windows CE 6?
> CE 6.0 / .NET CF 3.5 Application has encountered a serious error (MC3100)

到目前为止我尝试过的事情:

>手动清理所有资源.我已经搜索了所有位图创建并处理或缓存它们.错误仍然存??在,不仅是Bitmaps不好……

解决方法

我有一个理论,那就是系统交换.如果调试器试图检索自己大小超过 CE’s paging pool大小的变量的内容,我可以想象它会死锁.调试器停止系统读取数据,但系统无法提供内容,因为它无法交换数据.使用IOCTL_HAL_GET_POOL_PARAMETERS,您应该能够检测系统是否正在交换.

(编辑:李大同)

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

    推荐文章
      热点阅读