我正在使用sqlite-net async API来编写
Windows Phone应用程序.在编写单元测试以确保我的适配器到sqlite-net API正确创建文件时,我注意到适配器继续保持在文件句柄上,即使超出范围.
异步连接类(sqliteAsyncConnection)不支持IDisposable,因此我无法手动处理它.看源码,似乎async API创建一个连接,使用它并且每次都处理它.但是,当我的测试清理代码尝试删除创建的测试数据库时,其他资源仍然保留在其上.
解决方法
如果数据库应该通过电子邮件发送以进行调试/分析,我有完全相同的问题.没有办法这样做,因为连接被保持.
namespace sqlite { public partial class sqliteAsyncConnection { public void ResetConnections() { sqliteConnectionPool.Shared.Reset(); } } }
然后将上述Reset方法的访问修饰符更改为public.
在您的应用程序代码中,只需调用< YoursqliteAsyncConnection> .ResetConnections();删除DB文件之前.
然后,再次测试时,您可以在内存中创建数据库,所以您根本不必删除它.您可以通过将DatabasePath设置为“:memory:”来实现此目的.