首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite序列化模式

SQLite序列化模式
EN

Stack Overflow用户
提问于 2013-08-14 22:20:53
回答 1查看 765关注 0票数 1

我有一个Xamarin Android项目,正在使用mono.data.sqlite,但在多线程方面遇到了问题,所以我尝试了Zumero组件。我还是有问题。我正在尝试设置序列化模式,就像http://www.sqlite.org/threadsafe.html中的标志SQLITE_CONFIG_SERIALIZED一样。我还是有随机崩溃的情况。我能用Zumero设置序列化标志吗?除了从源代码重新编译SQLite之外,还有其他建议吗?

谢谢,

布赖恩

EN

回答 1

Stack Overflow用户

发布于 2014-09-27 22:15:42

我曾经有过这样的问题。尽管有相互矛盾的建议,但这里是我停止获取异常的原因:

在所有线程之间共享SQLiteConnection的静态实例。这样做是安全的,因为SQLite连接只是一个文件指针,它不像传统的数据连接。

使用SQLiteConnection的statix实例作为锁,将我的所有SQLite查询/插入/更新包装在一个互斥锁中。有人建议我在使用序列化模式时不需要这样做,但是我对它的经验却有所不同。

代码语言:javascript
复制
lock(myStaticConnection) {
   myStaticConnection.Query<Employee>("....");
}

作为备份,我还使用一些添加的重试逻辑来封装每个查询。不确定SQLite是不是自己做到了这一点(我看到有人提到了busytimeout,人们声称它现在已经消失了?)如下所示:

代码语言:javascript
复制
    public static List<T> Query<T> (string query, params object[] args) where T : new()
    {
        return Retry.DoWithLock (() => {
            return Data.connection.Query<T> (query, args);
        }, Data.connection, 0);
    }

    public static T DoWithLock<T>(
        Func<T> action,
        object lockable,
        long retryIntervalTicks = defaultRetryIntervalTicks,
        int retryCount = defaultRetryCount)
    {
        return Do (() => {
            lock (lockable) {
                return action();
            }
        });
    }

    public static T Do<T>(
        Func<T> action,
        long retryIntervalTicks = defaultRetryIntervalTicks,
        int retryCount = defaultRetryCount)
    {
        var exceptions = new List<Exception> ();

        for (int retry = 0; retry < retryCount; retry++) {
            try{
                return action();
            } catch (Exception ex) {
                exceptions.Add (ex);
                ManualSleepEvent (new TimeSpan(retryIntervalTicks));
            }
        }

        throw new AggregateException (exceptions);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18234331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档