如何回收我的 SqliteCommand 以加速此 Sqlite 批量插入 (iOS)?

2023-11-22

我使用下面的代码批量插入 30000 行(一次 1000 行)。但它仍然没有达到应有的速度。在这个例子中提高 SQLite 的每秒插入性能?我可以看到他们正在创建SqliteCommand仅一次,然后通过重置并清除绑定来回收它。但是,我在 iOS/Monotouch 上找不到合适的方法。没有Reset() or ClearBindings()或任何其他看起来类似的东西。

using ( var oConn = new SqliteConnection ( "Data Source=" + DB_NAME ) )
{
    oConn.Open (  );

    // Wrap the whole bulk insertion into one block to make it faster, otherwise one transaction per INSERT would be created.
    // Note that this is differen from "BEGIN TRANSACTION" which would increase memory usage a lot!
    SqliteCommand oCmd = new SqliteCommand ( "BEGIN", oConn );
    oCmd.ExecuteNonQuery (  );
    oCmd.Dispose (  );

    foreach ( MyObj oObj in aMyObjects )
    {
        oCmd = new SqliteCommand ( "INSERT INTO LocalObjects ( intID, intParentID, intObjectType, strName, dtModified VALUES (@intID, @intParentID, @intObjectType, @strName, @dtModified)", oConn );
        oCmd.Parameters.AddWithValue ( "@intID", oMyObj.ID );
        oCmd.Parameters.AddWithValue ( "@intParentID", oMyObj.ParentID );
        oCmd.Parameters.AddWithValue ( "@intObjectType", ( int ) oMyObj.Type );
        oCmd.Parameters.AddWithValue ( "@strName", oMyObj.Name );
        oCmd.Parameters.AddWithValue ( "@dtModified", oMyObj.Modified );
        oCmd.ExecuteNonQuery (  );
        oCmd.Dispose (  );
    }

    oCmd = new SqliteCommand ( "END", oConn );
    oCmd.ExecuteNonQuery (  );
    oCmd.Dispose (  );

    oConn.Close (  );
    oConn.Dispose (  );
}

尝试将您的代码更改为以下内容:

using ( var oConn = new SqliteConnection ( "Data Source=" + DB_NAME ) )
{
    oConn.Open (  );

    // Wrap the whole bulk insertion into one block to make it faster, otherwise one transaction per INSERT would be created.
    // Note that this is differen from "BEGIN TRANSACTION" which would increase memory usage a lot!
    SqliteCommand oCmd = new SqliteCommand ( "BEGIN", oConn );
    oCmd.ExecuteNonQuery (  );
    oCmd.Dispose (  );

    oCmd = new SqliteCommand ( "INSERT INTO LocalObjects ( intID, intParentID, intObjectType, strName, dtModified VALUES (@intID, @intParentID, @intObjectType, @strName, @dtModified)", oConn );

    // <do this for all of your parameters>.
    var id = oCmd.CreateParameter();
    id.ParameterName = "@intID";
    oCmd.Parameters.Add(id);
    // </do this for all of your parameters>.

    foreach ( MyObj oObj in aMyObjects )
    {
        // <do this for all of your parameters>.
        id.Value = oMyObj.ID;
        // </do this for all of your parameters>.

        oCmd.ExecuteNonQuery (  );
    }

    oCmd.Dispose();

    oCmd = new SqliteCommand ( "END", oConn );
    oCmd.ExecuteNonQuery (  );
    oCmd.Dispose (  );

    oConn.Close (  );
    oConn.Dispose (  );
}

基本上,在每个循环中,您现在只需更改参数的值,而不是构造一个全新的查询。然而,我不确定你的表现是否真的会从中受益。你需要尝试一下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何回收我的 SqliteCommand 以加速此 Sqlite 批量插入 (iOS)? 的相关文章

  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 更快的排列生成器

    我为 Scala 列表编写了一个排列生成器 它生成给定列表的所有排列 到目前为止 我已经得到以下基于这个 Haskell 实现 我认为它比我尝试过的其他几个选项更有效 有什么方法可以提高效率 或者我已经涵盖了所有基础吗 For each e
  • 通过Curl/PHP查询API

    我正在查看 Parse com REST API 并使用 PHP 使用的 Curl 包装器进行调用 原始 Curl 代码 有效 curl X GET H X Parse Application Id myApplicationID H X
  • Struts2 文件上传最大大小

    我需要上传最多 10 MB 的文件 我使用了以下内容 在我的 struts xml 中 我配置如下
  • 让 VB6 显示哪个组件没有安装设计时许可证

    我继承了一个我正在尝试 制作 的 VB6 项目 构建在 制作 EXE 步骤中失败 并出现许可错误 License information for this component not found You do not have an app
  • C# 代码在后台以静默模式运行我的 installer.exe 文件,[重复]

    这个问题在这里已经有答案了 我有这个 C 代码 string desktopPath Environment GetFolderPath Environment SpecialFolder Desktop ProcessStartInfo
  • mysql中的同步存储过程执行

    我有一个存储过程mysql也就是说 执行需要同步的任务 这样 如果两个应用程序调用存储过程 则只有一个应用程序可以访问一段代码来执行该任务 而另一个应用程序将被阻止 直到第一个应用程序完成任务 DELIMITER CREATE PROCED
  • Visual C++:#include 来自同一解决方案中其他项目的文件

    我正在使用 Visual C 开发游戏 我在单独的项目中有一些组件 并设置了项目依赖项 如何 include 来自不同项目的头文件 我不知道如何在另一个项目中使用一个项目中的类 编译器的设置 在您想要 include 头文件的项目中anot
  • 如何在 Scala 中使用正则表达式进行模式匹配?

    我希望能够找到单词的第一个字母与组中的一个字母 例如 ABC 之间的匹配项 在伪代码中 这可能看起来像 case Process word gt word firstLetter match case a c A C gt case gt
  • 在 R markdown 中使用内联带空格的变量名称

    我怎样才能包含内联R引用包含空格或其他异常字符的变量名的代码 实际用例是Pr gt F 反引号是解决方案简单地R脚本 但当代码内联在 Markdown 文档中时它们似乎不起作用 这是一个例子 r df lt data frame mydat
  • 如何针对特定查询优化表?

    您使用哪些模式来确定频繁查询 如何选择优化因素 人们可以做出哪些类型的改变 这是一个很好的问题 虽然相当广泛 但也并不更糟 如果我理解你的意思 那么你是在问如何从头开始解决优化问题 首先要问的问题是 是否存在性能问题 如果没有问题 那么就完
  • Lambda 表达式和高阶函数

    如何使用带有闭包的 Java 8 编写支持将函数作为参数并返回函数作为值的方法 在 Java Lambda API 中 主类是java util function Function 您可以像使用所有其他引用一样使用对此接口的引用 将其创建为
  • Powershell 4 Get-ScheduledTask 和 Windows

    我认为无论您使用什么操作系统 如果安装了 Powershell 您都可以访问相同的默认 cmdlet 所以我想用获取计划任务在我的 Windows 7 机器上 我安装了 Powershell 4 但是 当我运行它时 我收到错误 Get Sc
  • iOS:自动布局导致 UIScrollView 不滚动

    我已经设置了一个UIScrollView我想用它水平显示 12 张图像 屏幕上只能显示 8 张 在下图中 您可以看到我遇到的问题 这使得我的滚动视图无法滚动 我的约束和UIScrollView我已将其添加到故事板上 我已经调用了以下方法 v
  • Play 框架 CORS 标头

    我正在尝试为我的 Play 框架应用程序设置 CORS 标头 具体来说我收到这个错误 cannot load http 127 0 0 1 9000 No Access Control Allow Origin header is pres
  • ActiveRecord::StatementInvalid: PG::Error: 错误: 列“id”中的空值违反了非空约束

    我在我的应用程序中经常收到以下错误 如果我重新启动 Rails 应用程序 此错误将在一段时间内不会出现 导轨 3 1 3 红宝石 1 9 3 ActiveRecord StatementInvalid PG Error 错误 空值 列 id
  • Objective C 中的动态特性

    我发现 Objective C 对象属性可以标记为 dynamic让编译器知道实现将在运行时可用 我想知道是否有一种方法可以告诉编译器对象上的所有属性都是动态的 而无需逐一显式指定它们 我没有预先提供属性列表 我知道如果我只使用这不会成为问
  • Spring 的 @Autowired 是一个巨大的性能问题吗?

    我有一个项目 我不知道 200 300 daos 服务 控制器 我使用 Autowired将所有内容连接在一起 而不是指定中的所有内容applicationContext xml 我的问题是 这对我的启动时间有多大的性能影响 删除所有的是否
  • MERGE 表,匹配时不执行任何操作

    我有一张桌子DOMAINS在 2 个不同的列模式中ID NAME CODE DESCRIPTION For any NAME存在于新模式中 它应该使用现有的ID没有任何合并 对于那些新的NAME记录 它应该插入ID来自旧模式 MERGE I
  • 在 PHP 中跨服务器传输会话

    我需要跨服务器传输用户会话 IE 如果用户登录 server1 并且该用户存在于 server2 中 那么我必须将用户会话详细信息传输到 server2 为此 我使用了以下技术 从 server1 将用户重定向到http server2 a
  • 如何回收我的 SqliteCommand 以加速此 Sqlite 批量插入 (iOS)?

    我使用下面的代码批量插入 30000 行 一次 1000 行 但它仍然没有达到应有的速度 在这个例子中提高 SQLite 的每秒插入性能 我可以看到他们正在创建SqliteCommand仅一次 然后通过重置并清除绑定来回收它 但是 我在 i