gpt4 book ai didi

c# - 插入到Sqlite数据库中以实现独立的存储性能

转载 作者:行者123 更新时间:2023-12-03 19:50:32 25 4
gpt4 key购买 nike

在我的Windows Strore应用程序中,我在隔离存储中具有SQLite数据库。
我使用sqlite-net库。
要将数据保存到数据库中,请使用以下命令:

 public static async Task Save<T>(List<T> items) 
{
var serverFolder = await ApplicationData.Current.LocalFolder.GetFolderAsync("FolgerName");
var storageFile = await serverFolder.GetFileAsync("DataBaseName.sqlite");
using (var db = new SQLiteConnection(storageFile.Path))
{
Debug.WriteLine("Save to DataBase " + (typeof(T)) + " started " + DateTime.Now.Minute + ":" + DateTime.Now.Second + ":" + DateTime.Now.Millisecond);
try
{
foreach (var item in items)
{
db.InsertOrReplace(item);
}
Debug.WriteLine("Save to DataBase " + (typeof(T)) + " success " + DateTime.Now.Minute + ":" + DateTime.Now.Second + ":" + DateTime.Now.Millisecond);
}
catch
(SQLiteException ex)
{
Debug.WriteLine("Save to DataBase " + (typeof(T)) + " error. Result: " + ex.Result + " Message: " + ex.Message);
}
}
}


我对性能有疑问:
在数据库中保存的1226个对象(每个字段有60个字段)以4分半的时间保存!
这是正常的?
我怎样才能使其更快?

更新资料

当我使用时:

  public static async Task Save<T>(List<T> items, Server server) where T : IHasId
{
var serverFolder = await ApplicationData.Current.LocalFolder.GetFolderAsync(server.FolgerName);
var storageFile = await serverFolder.GetFileAsync("kaliti.sqlite");
using (var db = new SQLiteConnection(storageFile.Path))
{
Debug.WriteLine("Save to DataBase " + (typeof(T)) + " started" + String.Format("{0:d/M/yyyy HH:mm:ss}", DateTime.Now));
try
{
var table = db.Table<T>();
var idList = new List<int>();
foreach (var i in table)
{
idList.Add(i.Id);
}
foreach (var item in items)
{
if (idList.Contains(item.Id))
{
db.Delete<T>(item.Id);
}
db.Insert(item);
}
Debug.WriteLine("Save to DataBase " + (typeof(T)) + " success" + String.Format("{0:d/M/yyyy HH:mm:ss}", DateTime.Now));
}
catch
(SQLiteException ex)
{
Debug.WriteLine("Save to DataBase " + (typeof(T)) + " error. Result: " + ex.Result + " Message: " + ex.Message);
}
}
}


和数据库是空的,我有同样的东西。

最佳答案

您需要在事务内部运行尽可能多的数据库调用。这样做可以大大加快速度。这是一个示例交易,使用第一个示例中的代码:

...
try
{
db.RunInTransaction(() =>
{
foreach (var item in items)
{
db.InsertOrReplace(item);
}
});
...

关于c# - 插入到Sqlite数据库中以实现独立的存储性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16898837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com