我在VB.NET中编写了一个程序,该程序所做的一件事就是将记录插入到Microsoft Access数据库中。访问数据库的程序后端被写为可互换层。如果我将这个图层与使用Microsoft SQL Server数据库的图层“交换”,我的程序就会飞。如果我使用MS Access,它仍然很快,但速度要慢得多。有没有人有任何关于如何使用Microsoft Access加速ADO.NET事务的提示或技巧?我真的宁愿在SQL Server上使用MS Access,这样我就可以用我的程序分发我的数据库(而不是连接到一些远程SQL Server)。有什么建议?此外,当我创建MS Access数据库时,我在Access 2000兼容模式下创建它。使用2003兼容模式会更快吗?
提前致谢
答案 0 :(得分:2)
虽然您需要安装它,但SQL Server Express支持“XCopy文件部署”,您需要做的就是发布.mdf文件和可执行文件。
MSDN上的详细信息为here。
这确实支持存储过程:我在单元测试中使用它来动态创建一个模拟的数据库。
答案 1 :(得分:1)
正如您所经历的那样,访问权限不是最佳的。
你看过SQL Server Compact Edition了吗?它可以与您的应用程序一起嵌入和分发......并且应该比Access更好。
答案 2 :(得分:0)
SQL Server Compact 3.5将为您提供相同的好处 - 您可以部署和分发的单个数据库文件(只要您在应用程序中包含运行时程序集)。 与完整的SQL Server实例相比,它降低了查询功能,但它肯定比Access引擎更快。
我将它用于具有桌面组件的移动应用程序,它完成了我需要它做的所有事情。
答案 3 :(得分:0)
您是否同时在Access中打开了Access后端?如果是这样尝试你的程序而不打开它。如果这样可以加快速度,那么您应该打开数据库连接或记录集(针对记录很少的表),并在处理数据时保持打开状态。
问题是,如果针对Access数据库文件打开和关闭对象或记录集,而其他人在Access数据库文件中,Jet会浪费大量时间对LDB文件进行锁定。因此,保持与Access数据库文件的永久连接可以解决此问题。
答案 4 :(得分:0)
根据我的经验,ADO.NET对MS Access没有太多优化。使用较旧的ADO或DAO接口(通过COM在VB.NET中可用)可以在某些情况下为您带来20倍或更高的性能提升。但这一切都取决于你的程序真正做了多少SQL语句(大量批量更新/插入,或大量结果集的查询,或许多交互式LOAD-Transform-Store循环)。
答案 5 :(得分:0)
MSDN上有一篇关于如何加速ADO.NET的文章:http://msdn.microsoft.com/en-us/library/ms998569.aspx 虽然这篇文章有点尘土飞扬,但仍然有一些好处:)
除此之外,我自己使用MS Access,我发现一些技术,如缓存数据,选择没有源方案或优化查询,都适合将性能保持在中等水平。