
Slava
30.01.2017
08:43:54

Vitaly
30.01.2017
08:44:45
Assembly SQLite.Net.Async, Version=3.1.0.0, Culture=neutral, PublicKeyToken=null
если я правильно понял вопрос

Artem
30.01.2017
08:44:47

Slava
30.01.2017
08:45:34

Google

Vitaly
30.01.2017
08:45:39
public async Task<T> GetWithChildren<T?int id) where T : class, IBaseEntity, new() =>
await _db.FindWithChildrenAsync<T?id);

anton
30.01.2017
08:45:47

Vitaly
30.01.2017
08:46:04
ну вот это мои API, из которых я дёргаю уже родные методы SQLite
iphone 6

Artem
30.01.2017
08:46:14
У Вас либо два потока юзают один и тот же коннекшен, либо dispose отрабатывает раньше

Friedrich
30.01.2017
08:46:34
а что за девайсы кстати?
Андроиды разные. Например, на LG постоянные глюки всего UI и невоспроизводимые на эмуле ситуации с activity life cycle.

Artem
30.01.2017
08:46:36
так. а как _db создается?

Friedrich
30.01.2017
08:46:50

Vitaly
30.01.2017
08:47:22
Mvx.ConstructAndRegisterSingleton<IRepository, Repository?);
public RepositoryAsync(SQLiteAsyncConnection db)
{
_db = db;
}
public Repository(SQLiteAsyncConnection db)
{
_db = db;
}
так точнее
тут еще просто MVVMCROSS прикручен

Google

anton
30.01.2017
08:48:20

Friedrich
30.01.2017
08:48:36
Э, не, не скажи. В нативных апликейшенах тоже глюки встречаются.
Такого чтоб были именно глюки Xamarin — я в этом году пока не встречал.

Artem
30.01.2017
08:49:17

Vitaly
30.01.2017
08:49:25
да

Artem
30.01.2017
08:49:55
а в IoC как регистрируется SQLiteAsyncConnection ну и сами репозитории?

Vitaly
30.01.2017
08:49:56
MVVMCROSS предоставляет IoC
Mvx.ConstructAndRegisterSingleton<IRepository, Repository?);

Artem
30.01.2017
08:50:59
я так подозреваю, что регистрируется как Singleton
и все репозитории используют один и тот же коннекшен

Vitaly
30.01.2017
08:58:21
а SQLiteAsyncConnection?
А его походу MVVMCROSS инстанцирует при внедрении зависимоти, ибо явно у нас нигде не объявлен инстанс SQLiteAsyncConnection
имхо тоже синглотн

anton
30.01.2017
09:11:37
что то у меня странные мысли на счет всего этого...

Artem
30.01.2017
09:11:43

anton
30.01.2017
09:11:45
а DataReader не может лочить коннекшн?

Artem
30.01.2017
09:11:54
он не async
т.е. если Вы используете плагин из mvvmcross, то он не async
впринципе

anton
30.01.2017
09:12:41
если DataReader disposable, то вероятно нужно обернуть его в using и внутри почитать?
на диспозе он может быть коннекшн освобождает?

Google

Artem
30.01.2017
09:13:54
короче, проблема 100% в том, что у вас один коннекнешн на все репозитории. С сихронным кодом, тут проблем не будет. Проблемы начинаются, когда несколько потоков его используют

Vitaly
30.01.2017
09:15:13
хм.. И как это решить?

anton
30.01.2017
09:16:34
хм.. И как это решить?
ну как решение в лоб - на каждую операцию открывать коннект и после завершения операции - закрывать
стектрейс не вытащить?

Vitaly
30.01.2017
09:17:59
со стеком тяжко, ибо у меня не возспроизводится баг даж

anton
30.01.2017
09:18:19
а с того девайса на котором падает?

Friedrich
30.01.2017
09:18:28
На девайсе нет возможности попробовать?

Vitaly
30.01.2017
09:18:41
Вот сейчас пробую на iPad

Artem
30.01.2017
09:18:50

Vitaly
30.01.2017
09:20:03
спасибо, сейчас попробую
Ребят, вот нашел кое-какие данные из отчёта HockeyApp про падение приложения
[SQLiteApiIOS Prepare2(SQLite.Net.Interop.IDbHandle db, System.String query)]
SQLite.Net.SQLiteException: database is locked

? Райзя ?
30.01.2017
09:39:38
вот у тебя клевый путин на аватарке

Vitaly
30.01.2017
09:39:53
))

anton
30.01.2017
09:40:19
SQLite.Net.SQLiteException: database is locked
ну значит таки да, блокировки, многопоточность и вот это всё
диагноз был верным :)

Sergey
30.01.2017
09:40:39

Vitaly
30.01.2017
09:41:49
Так вот я пытаюсь воспроизвеси - сделал цикл на 100 итераций, и там пытаюсь эвэйтить запросы - на айпаде крутится минут 5, но в итоге отрабатывает - не получается воспроизвести хоть ты тресни, а у заказчика на iPhone6 падает

Friedrich
30.01.2017
09:42:06

Google

Sergey
30.01.2017
09:42:11
Кстате апдейт на 2017 выкатили, грят чото починили

Vitaly
30.01.2017
09:42:20
ParallelFor типа?

anton
30.01.2017
09:42:24

Slava
30.01.2017
09:43:27
ага поставил. только недопёр как там xamarin на stable канал переключить.

Sergey
30.01.2017
09:43:47

Black and
30.01.2017
09:43:58
ребята, привет. кто сейчас свободен? нужно небольшую задачку решить за деньги
в личку

anton
30.01.2017
09:44:25
медведев пришел

Timur
30.01.2017
09:44:56
фонд развития ИТ пилит, не иначе

Admin
ERROR: S client not available

Sergey
30.01.2017
09:45:00

Vitaly
30.01.2017
09:45:14
GetAllWithChildrenAsync

anton
30.01.2017
09:45:42

Vitaly
30.01.2017
09:45:57
вот нет ((

anton
30.01.2017
09:46:35
а ты там точно нигде в базу не пишешь ничего?

Vitaly
30.01.2017
09:48:31
вроде нет. Но даже если б и писал, то я думал оно как-то должно лочиться внутри, ждать, пока один поток дочитает, потом впускать следующего... Они ж предоставили асинхронные апи, и должны были сделать вызовы безопасными. или я чего не понимаю...

anton
30.01.2017
09:49:43
у тебя где-то в коде в явном виде есть OpenConnection?
SQLiteConnection метод Open() кажется.. (на память не помню уже)
и ты там случайно не SQLiteConnectionWithLock создаешь?

Vitaly
30.01.2017
09:53:18
Не, но нашел регистрацию коннекшена ))

Google

Vitaly
30.01.2017
09:53:20
Mvx.RegisterSingleton(typeof(SQLiteConnection), new SQLiteConnection(new SQLitePlatformIOS(), path));
Mvx.RegisterSingleton(typeof(SQLiteAsyncConnection),
new SQLiteAsyncConnection(
() =>
new SQLiteConnectionWithLock(new SQLitePlatformIOS(),
new SQLiteConnectionString(path, true))));
new SQLiteConnectionWithLock(new SQLitePlatformIOS(),
может этот момент ??

Friedrich
30.01.2017
09:57:58
Ну, хм, значит, у тебя точно один конекшен на всё приложение — и к гадалке не ходи. Синглтон же.

Vitaly
30.01.2017
09:58:11
ну да
Так а если юзать разные коннекшены, то не станет ли еще хуже? Я просто с БД так себе, а уж тем более SQLite

anton
30.01.2017
09:59:40
в случае чтения - врят ли.
в случае записи - станет :)
для тебя один коннекшн - норм
надо разобраться, кто лок не отдает

Vitaly
30.01.2017
10:00:16
ну в остальном я же везде просто дёргаю родные API
ybrfrb[ jgtyjd cfv yt ltkf.
никаких опенов сам не делаю

Slava
30.01.2017
10:01:34
можно включить остановку на все эксепшенах, может где-то затрайкетчили внутри

Vitaly
30.01.2017
10:02:02
вот еще беда - как воспроизвести...
может кто подскажет надёрный способ выкинуть такую ошибку,

anton
30.01.2017
10:02:18
убедись что там всё чекнуто

Vitaly
30.01.2017
10:03:13

anton
30.01.2017
10:03:20
100% что то отключено
для CLR поставь галочку :) чтоб убедиться что всё включил
может у тебя там как раз игнорится SQLite.Net.SQLiteException
и у тебя белая тема .... ты не на той стороне
Эта группа больше не существует