2012-11-30 29 views
1

我有一个用户在使用我的应用程序时报告此错误。无法打开共享内存区域错误

该应用程序是在Windows XP Embedded上运行的.NET Winforms应用程序,使用SQL Server CE 3.5 sp1,Linq-To-SQL作为ORM。数据库本身位于我的应用程序在My Documents文件夹中创建的子目录中。用户帐户是系统上的管理员帐户。没有其他应用程序或进程连接到数据库。

大部分情况下,应用程序似乎运行良好。它启动后,可以从数据库中加载数据并将数据保存到数据库中。用户每天使用应用程序访问数据库可能会多达几百次。他们得到这个错误,但只是间歇性的。也许每天3-4次。

在代码本身中,对数据库的所有调用都使用包装在using子句中的Linq-To-SQL数据上下文。所以,换句话说:

using(MyDataContext db = new MyDataContext(ConnectionString)) 
{ 
    List<blah> someList = db.SomeTable.Where(//selection criteria).ToList(); 

    return(someList); 
} 

这就是几乎所有的调用数据库的样子(所不同的是明显保存数据的那些没有选择和返回任何东西)。正如我之前提到的,他们在99%的时间内没有问题,但每天只能获得几次共享内存错误。

我当前的“修复”是在应用程序启动时我简单地从数据库中读取所有数据(并不是很多)并将其缓存在内存中,并将数据库调用转换为从内存列表中读取。到目前为止,这似乎解决了这个问题。现在他们已经报告了一天半没有问题。但是这仍然困扰着我,因为我不知道最初会导致错误的原因。

虽然应用程序每天访问数据库几百次,但它通常不是快速连续的。通常每隔几分钟至少一次。但是,有一种情况下可能会有两个请求,一个接一个地接一个,尽可能快。换句话说,这样的:

//user makes a selectio n on the screen 
DatabaseCall1(); 
DatabaseCall2(); 

这两项会遵循上面,他们创建新的上下文中的代码块的模式,做的工作,然后返回。但是这些调用不是异步的,所以我希望在调用DatabaseCall2之前关闭连接并处理它。但是,SQL Server CE端的某些东西是否会不够快地关闭连接?这也许可以解释为什么它可能是间歇性的,因为也许大多数时候它没有问题?我还应该提及,没有修复的这个确切的程序安装在几个其他系统上,它们具有完全相同的硬件和软件(它们是相互克隆的),而其他系统的用户没有报告任何错误。

因为我无法在我的开发机器或测试机器上重现此错误,所以我被困在脑后,并且在这里和其他地方通常围绕不充分的用户权限或数据库上的数据库共享网络文件夹。

+0

是否有问题的用户已打开的数据库文件我另一应用程序/软件(有不同的连接字符串)?或者你的应用程序使用几个不同的(逐字母)连接字符串? – ErikEJ

回答

相关问题