@CSharpChatЭта группа больше не существует

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

Slava
30.01.2017
08:45:34
Assembly SQLite.Net.Async, Version=3.1.0.0, Culture=neutral, PublicKeyToken=null если я правильно понял вопрос
Если мне память не изменяет, то эта фигня не многопоточная, попробуй локами обложить запросы

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);

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
а что за девайсы кстати?
А вот Huawei любит уведомления просирать.

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
Friedrich
30.01.2017
08:48:36
Э, не, не скажи. В нативных апликейшенах тоже глюки встречаются.

Такого чтоб были именно глюки Xamarin — я в этом году пока не встречал.

Artem
30.01.2017
08:49:17
public Repository(SQLiteAsyncConnection db) { _db = db; }
а репозиторий как инстанцируется? Через IoC?

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
А его походу MVVMCROSS инстанцирует при внедрении зависимоти, ибо явно у нас нигде не объявлен инстанс SQLiteAsyncConnection
странно. судя по https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins#sqlite MVVMCROSS тащит свой SQLLite

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
хм.. И как это решить?
Попробуйте https://mvvmcross.com/docs/sqlite-pcl

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
[SQLiteApiIOS Prepare2(SQLite.Net.Interop.IDbHandle db, System.String query)] SQLite.Net.SQLiteException: database is locked
ну вот локи - это беда всех стендэлон баз, да. Если с чтением еще куда ни шло, то с записью беда

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

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

Vitaly
30.01.2017
09:45:14
GetAllWithChildrenAsync

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
можно включить остановку на все эксепшенах, может где-то затрайкетчили внутри
хорошая мысль. может у @Jubadze и правда часть эксепшнов выключена



убедись что там всё чекнуто

Vitaly
30.01.2017
10:03:13


anton
30.01.2017
10:03:20
100% что то отключено

для CLR поставь галочку :) чтоб убедиться что всё включил

может у тебя там как раз игнорится SQLite.Net.SQLiteException

и у тебя белая тема .... ты не на той стороне

Страница 279 из 1888

Эта группа больше не существует Эта группа больше не существует