某些计算机上的SQL Server CE速度极慢

时间:2013-12-03 15:19:54

标签: c# sql sql-server sql-server-ce clickonce

我构建了一个默认使用SQL Server CE 4.0的应用程序,但也可以使用单独的SQL Server(SQL Server Express)。

我已经将它部署到办公室周围的大约10台计算机上,除了其中2台之外它工作正常:副总裁和QA人,当然: - /

在这些计算机上,数据库访问大约需要30秒! 如果我安装SQL Server Express 2008 R2,并告诉我的应用程序使用它,那么它运行速度非常快。

  • 两台问题机器都是WinXP SP3,但大多数工作PC都是XP。
  • 我正在使用C#.NET 4.0 App通过ClickOnce使用SQL Server CE的私有部署。
  • 我正在使用DbProviderFactory来允许使用相同的查询文本(或数据适配器)访问SQL Server Express或SQL Server CE。
  • 大多数查询都很简单。一些人使用DataAdapter
  • 几乎所有的查询最终都会返回数据,但是我看到我的日志文件中有一个返回空,没有错误/异常,但应该有大约20-40行和大约80列。
  • 对于每个查询,我创建,打开和关闭连接。我不清楚是否需要/推荐/不推荐使用SQL Server CE。

我无法理解为什么这个应用程序适用于大多数PC,但不适用于这些应用程序。

欢迎任何想法。

谢谢!

2 个答案:

答案 0 :(得分:3)

此问题的中间原因和解决方法是用户访问受密码保护的数据库使用的.NET加密文件。通过更改文件夹的权限解决了该问题。

您可以使用Run-As Admin打开命令提示符并发出此命令(Win XP)

 cacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys" /E /G Everyone:R

我还在SQLCE连接字符串代码附近的代码中添加了这条评论:

 /**************************************************************************************
 * To get rid of the slowdown on non-admin users you need to grant them read access to this folder:
 * C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys  (XP, 2003)
 * C:\Users\All Users\Microsoft\Crypto\RSA\MachineKeys  (Windows 7 or 2008)
 **************************************************************************************/

此处提及此问题:SqlCe opens slow under a limited user account in Windows XP

在这里:http://social.msdn.microsoft.com/Forums/sqlserver/en-US/eb6a01a7-0bfd-41e3-b4c8-34581c5ccaa3/sql-compact-4-locks-up-30seconds-when-accessing-encrypted-database-on-windows-xp-when-running-in?forum=sqlce

注意:在问题机器上,在WinExplorer中可以看到... \ MachineKeys文件夹,但实际上无法读取这些文件。 “Everyone”具有“特殊”权限,不允许“读取”。我认为.NET可能是由域管理员安装的,而不是本地管理员。

这只是一种解决方法。我仍然不明白为什么该文件夹在几台机器上拥有奇怪的权限,而不是其余的。我正在使用ClickOnce进行部署,因此无法自动更改文件夹权限。

我只看到了XP的这个问题,其他帖子暗示这只是一个XP问题,所以希望我不必长时间担心...

答案 1 :(得分:2)

我遇到了与SQL Server CE类似的问题。我发现从http://www.microsoft.com/en-us/download/details.aspx?id=17876安装最新版本解决了问题

我怀疑这些计算机已经在全局程序集缓存中安装了早期版本的SQL Server CE,并且正在使用早期版本而不是本地部署版本。

另外,请查看this post中Lingzhi Sun的信息。如果数据库在与创建它的操作系统不同的操作系统上使用,则可能会导致性能问题。 This blog post也可能有所帮助。