Я пишу Windows 10 Universal App (UWP). Простая функциональность. У меня локальный локальный файл базы данных SQLite (.db) уже заполнен реестрами. Поэтому я в основном просто читаю и показываю информацию. Файл данных имеет несколько таблиц и таблиц соединений, а записей не так много, всего 112 строк с шестью столбцами. Это мой DataBaseConnector класс:UWP SQLite-PCL получить запросы работают очень медленно
class DataBaseConnector
{
public const string dbName = "HeroData.db";
/* connection element for SQLite universal platform */
//private static string dbFilePath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "HeroData.db");
Func<SQLiteConnectionWithLock> connectionFactory =
new Func<SQLiteConnectionWithLock>(
() =>
new SQLiteConnectionWithLock(
new SQLitePlatformWinRT(),
new SQLiteConnectionString(dbName, storeDateTimeAsTicks: false)));
private static DataBaseConnector db = new DataBaseConnector();
private SQLiteAsyncConnection GetDbConnectionAsync()
{
var asyncConnection = new SQLiteAsyncConnection(connectionFactory);
return asyncConnection;
}
public static DataBaseConnector dbInstance
{
get {
if (db == null)
{
db = new DataBaseConnector();
}
return db;
}
}
public static List<Hero> AllHeroesList = new List<Hero>();
public DataBaseConnector()
{
}
//Get All Heroes From DataBase
public async Task<List<Hero>> getAllHeroes()
{
if (AllHeroesList.Count == 0) {
//< get records >
string query = @"SELECT hero.id, hero.name, hero.attack_id, hero.attribute_id, hero.role_id, attack.type AS type_name, attribute.name AS attribute_name FROM
Heroes hero, AttackType attack, Attribute attribute Where hero.attack_id = attack.id AND
hero.attribute_id = attribute.id";
var connection = this.GetDbConnectionAsync();
AllHeroesList = await connection.QueryAsync<Hero>(query);
}
return AllHeroesList;
}
Когда я запускаю это его работает нормально, но немного медленно, тыс метод AllHeroesList(); занял около 1400 мс на локальном компьютере (рабочий стол) и ~ 300-400 мс на телефонном устройстве (Lumia 930 - Windows Mobile 10). Я не знаю, почему существует такая разница в производительности. У меня больше методов Get, каждый из них получает информацию из базы данных слишком медленно. Когда я должен использовать 3 или более метода на одном и том же XAML Page 3x ~ 1400ms более 4 секунд, чтобы показать содержимое на локальной машине, на телефонном устройстве происходит довольно быстрое ~ 1 сек. Я хочу увеличить производительность.
Это, как я использую методы SQL в приложении страницах:
EnableProgressRing();
if (ct != null && ct.Token.CanBeCanceled)
{
ct.Cancel();
}
ct = new CancellationTokenSource();
heroRoles.Text = await Task.Run(() => GetHeroRoles(ChosenHero.id), ct.Token);
IsWeakList.ItemsSource = await Task.Run(() => DataBaseConnector.dbInstance.GetWeakAgainst(heroID), ct.Token);
IsStrongList.ItemsSource = await Task.Run(() => DataBaseConnector.dbInstance.GetStrongAgainst(heroID), ct.Token);
DisableProgressRing();
Я буду признателен, если кто-то может помочь мне с этой проблемой. Спасибо.
Я пробовал, но результат все тот же. Нет улучшения производительности. :( –