今天使用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用戶需要寫權限
