带有实体框架核心和加密sqlite的Xamarin表单耗时太长



当将Xamarin表单与EF Core和SQLite组合时,没有问题的小延迟,但当使用加密时,延迟太多

AppContext

public AppContext(string dbPath)
{
if (!string.IsNullOrEmpty(dbPath)) 
_dbPath = dbPath;
SQLitePCL.Batteries_V2.Init();
this.Database.EnsureCreated();
}

OnConfiguring:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.EnableSensitiveDataLogging();
//optionsBuilder
//    .UseSqlite($"Filename={dbPath}");
connection = InitializeSQLiteConnection(_dbPath);
optionsBuilder.UseSqlite(connection);
}
private static SqliteConnection InitializeSQLiteConnection(string databaseFile)
{
var connectionString = new SqliteConnectionStringBuilder
{
Mode = SqliteOpenMode.ReadWriteCreate,
DataSource = databaseFile,
Password = "Test123"
};
return new SqliteConnection(connectionString.ToString());
}

使用过的包装

  • Microsoft.EntityFrameworkCore.Sqlite.Core
  • Microsoft.Data.Sqlite.Core
  • SQLitePCLRaw.bundle_e_sqlcipher

对于依赖项注入,我使用AutoFac

var dbPath = Path.Combine(FileSystem.AppDataDirectory, "Store.db3");
builder.RegisterType<DataBase.Services.AppContext>().As<IDatabaseContext>().WithParameter("dbPath", "dbPath").InstancePerLifetimeScope();
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerLifetimeScope();

由于密钥派生的原因,首次使用SQLCipher连接的速度故意较慢。

最新更新