【问题标题】:SqlCE DB occasionally freezes on one handheld, not anotherSqlCE DB 偶尔会在一台手持设备上冻结,而不是另一台
【发布时间】:2010-06-15 23:34:35
【问题描述】:

我有两种类型的自定义手持设备,它们相似但略有不同,每种都运行相同的 WinForm 应用程序和 WinCE 数据库:

类型 1:WinCE 4.2,400 mhz,93244 kb 类型 2:WinCE 5.0, 520 mhz, 84208 kb

类型 1 将愉快地进行大批量数据库操作(由应用程序启动),类型 2 将始终在大约 200 个循环标记处开始 c-r-a-w-l-i-n-g (几个到多个循环)。在几个点它会开始正常运行,然后再次爬行。

该应用程序执行多个数据库操作(插入、更新和选择,不删除)。

为了简化我的情况,我构建了一个小型测试应用程序,它基本上是这样做的:

command_s.CommandText = "select dvr from vr where vid = 2211250";
command_u.CommandText = "update pvr set LocationID=81 where Status='OK' and vri = 27861";

while(going)
{
    command_s.ExecuteScalar();
    command_u.ExecuteNonQuery();
}

并设置它在两个单元上并排运行。果然,较慢的 (400 mhz) 单元超过了较快的 (520 mhz) 单元(现在大约提前 5000 个周期),我可以看到 520 mhz 单元有明显的停顿。

这是什么原因造成的?

【问题讨论】:

    标签: sql-server windows-ce arm


    【解决方案1】:

    您没有告诉我们太多关于您的测试环境的信息。假设您在两者上使用相同版本的 SQL CE,那么可能是较慢系统上的驱动程序(文件系统或总线)较慢,或者您存储的实际介质较慢。

    例如,如果其中一个写入 RAM,另一个写入 Flash,那么显然 RAM 设备的执行速度会快得多。不太明显的可能是一个使用 NAND,另一个使用 NOR 闪存,而 NAND 写入速度的缓慢正在影响您。或者,也许您正在使用 USB,而一个系统具有更快的 USB 总线。

    您可能会看到这种差异的原因有很多,并且在不了解目标硬件的情况下很多,很难确切地告诉您原因。

    【讨论】:

    • SqlCE 的版本应该相同(在构建exe时作为参考程序集提供)。尽管我确实相信更快的系统(执行速度较慢)是 SDHC,而速度较慢的系统(执行速度更快)是 MMC,但它们都写入闪存。
    • 嗯,你有两个完全独立的总线架构,很可能是总线不同。您是否尝试过对两者都进行简单的文件读/写?我敢打赌,您会发现相同的差异,这意味着这与 SQLCE 无关,而与您的硬件有关。识别 CE 5.0 设备的“问题”可能需要示波器、Platform Builder 以及对该 CE 5.0 系统的 SDHC 和闪存驱动程序的深入了解。
    • 在两个单元上运行纯粹的基于文件的压力测试似乎会重现问题。似乎是 SDHC 与 MMC 的差异导致了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多