Sqlite 事务问题! 急 急 急! 高手请进

MirsoftBXQ 2010-09-08 10:22:26
最近做了一个盘点的项目,手持设备用的MC1000,选择的数据库是sqlite,开发语言是C#,盘点程序的处理逻辑是
1.扫描货品条码,在货品基础资料表中判断条码是否存在。
2.如果存在则在对应的盘点单据中存入扫描信息。

程序用的3层结构,在UI层开启一个全局的connection,然后打开连接,每次执行扫描的方法时,将connection传到数据访问层,然后执行添加或者更新的代码。单发现每扫描6到7次后,程序就会出现假死的状态,后来发现时sqlite没有处理完,等处理完后程序又正常了。
后来我在UI层全局定义了一个transaction,每次和connection一起传到数据访问层,发现速度提升了,不会出现假死的状态,但是如果每次扫描都将事务提交的话,程序速度又降下来了。如果事务不提交,那么数据将不会保存,如果每次都提交事务速度又慢,这种盘点程序又不可能最后一起提交事务,那样会出现数据丢失的情况。

请问高手有没有什么办法,每次扫描的数据既要提交,速度还不能太慢。我的程序现在相应时间大约为0.5秒。
...全文
257 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiliang6022532 2010-09-12
  • 打赏
  • 举报
回复
看了看, 不错
TesterForever 2010-09-12
  • 打赏
  • 举报
回复
樓主該不會忘記將 connection 關掉吧???
wulala789 2010-09-12
  • 打赏
  • 举报
回复
sqlite虽说型号小点,但查询速度一点也不慢,除非你的数据量很大很大,原因很可能在于你的程序,比如你有没有使用using做连接,资源是否及时消除,有否大图片,也可能是硬件速度慢,可以用每次动作前用GC强制清理垃圾.
  • 打赏
  • 举报
回复
回到最原始的嵌入系统编程思路,其实基于文件的方案:数据一直往文件里append,然后后台进程可以在应用程序Idel事件(并且最后一次写数据已经超过5秒钟)的时候才将文件中的数据导入到数据库中并清空文件内容。
  • 打赏
  • 举报
回复
再通过两三步的重构来住不使用sqlite --> 再通过两三步的重构来逐步使用sqlite


许多时候,先做一个基于文件的解决方案就好了。
  • 打赏
  • 举报
回复
sqlite不使用事务(虽然也可以保存数据)跟使用事务,有100倍的速度差。使用事务的操作才比较快。但是这种快,就是基于通常编程时是大量数据(例如500条记录)一次性地commit的。

对于你的程序,我觉得基于数据库编程显得太图省事而遇到了麻烦。如果当初基于普通的文件去编程,然后再通过两三步的重构来住不使用sqlite,大概根本不会有这种烦恼,遇到问题只要删除最后的版本而恢复前一个版本就行了。

现在已经首先基于数据库了,就只能倒过来,你的数据仍然是每隔几十条才commit一次,而commit之前将这些数据在本地文件同时写(append方式即可)一份,commit成功则清空文件内容。
wuyq11 2010-09-11
  • 打赏
  • 举报
回复
程序打开时,开始事务,插入数据期间不提交,
或者每隔较大量的间隔提交一次。
插入一次数据就是IO一次磁盘
尽量减少提交事务的次数。
MirsoftBXQ 2010-09-11
  • 打赏
  • 举报
回复
但是这次用的设备是MC1000 没有WIFI功能,客户那也没有无线网络,上传数据只能通过数据线传输。

等待高手的出现......

在网上看到的方法都是批次执行大量数量的操作,而我的问题则是怎么提升sqlite每次执行的效率,也就是解决sqlite执行多次添加或者更新后,会出现程序假死的状态!
云瑀 2010-09-08
  • 打赏
  • 举报
回复
没研究过
帮顶
ckl881003 2010-09-08
  • 打赏
  • 举报
回复
sqlite性能不佳。。直接WIFI连接Pc服务器不就好了,CS模式

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧