今天使用Sqlite数据库时,在插入数据后,网站变慢。仔细检查代码,没有发现异常,只有一点:缓存莫名消失。缓存策略没有设置依赖性,百思不得其解:数据库改变,导致缓存消失?起初以为是sqlite的问题,Google后没有答案!
于是想写一个测试程序,写到一半,发现了问题:自己为了图省事将Sqlite数据库放在了bin目录下。现在看来bin是asp.net进程重点监视目录,只要此目录中的文件改变了,就会导致应用程序重新编译,不但缓存丢失,还导致asp.net程序重新预热,访问自然变慢!由此看来asp.net MVC还是动态编译的。测试环境是asp.net mvc2.0+3.5框架+iis6.0+win2003。
解决方法也很简单:将sqlite数据库文件放到App_Data文件夹下,其实这里才是放我们数据文件的地方,例如一些txt文件,都应放于此。
其实动态编译对于动态发布才有意义吧,我们的Asp.net mvc都是一次性发布的,动态编译好像没有必要,可是又找不到预编译的发布选项,望牛人指点!
另附Asp.net中使用Sqlite数据库的注意事项:
1、连接字符串需要全路径:
ConnectionString = "Data Source=" + HttpRuntime.AppDomainAppPath +
"\\App_Data\\test.db3;Pooling=true;FailIfMissing=false";
2、“Unable to open database file”错误:
此错误是由于数据库路径不对,更确切地说是:上边的连接字符串的全路径中有一个目录不存在,才会提示该错误,因为FailIfMissing=false如果数据库文件不存在,会自动新建一个同名的数据库文件。这种连接字符串会导致另一个错误的出现:“XX表不存在”。看来还是改为true好用。
3、“数据库文件只读”错误:
该错误是由于没有对数据库文件所在目录的写权限,添加此用户的读写权限
var user= System.Security.Principal.WindowsIdentity.GetCurrent().Name //此windows用户需要写权限