首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更快的插入sqlite3处理

更快的插入sqlite3处理
EN

Stack Overflow用户
提问于 2018-08-29 19:52:47
回答 2查看 55关注 0票数 1

我有这个函数,它打开一个包含一些产品的.TXT文件,并在sqlitedb上逐行插入。这个过程运行得很好,问题是。该文件包含2000+行,因此,该过程需要几个小时才能完成。我想知道是否有方法可以让这个过程更快一点。

下面是函数:

代码语言:javascript
运行
复制
   private void carrega_produtos()
    {
        var assembly = typeof(sincroniza_page).GetTypeInfo().Assembly;
        foreach (var res in assembly.GetManifestResourceNames())
        {
            if (res.Contains("produtos.txt"))
            {
                Stream stream = assembly.GetManifestResourceStream(res);
                var st = res.Count();
                using (var reader = new StreamReader(stream))
                {
                    string linha;
                    acesso_banco_produtos banco = new acesso_banco_produtos();
                    while ((linha = reader.ReadLine()) != null)
                    {
                        List<string> lista = linha.Split(new char[] { '§' }).ToList();
                        var cod = int.Parse(lista.ElementAt(0));
                        var nome_prod = lista.ElementAt(1);
                        var cod_grupo = lista.ElementAt(2);
                        var nm_grupo = lista.ElementAt(3);
                        var ind_ativo = lista.ElementAt(4);
                        var val_custo_unit = lista.ElementAt(5);
                        var val_custo = lista.ElementAt(6);
                        var perc_imposto = lista.ElementAt(7);
                        var unidade_med = lista.ElementAt(8);
                        var qtd_mes_1 = lista.ElementAt(9);
                        var qtd_mes_2 = lista.ElementAt(10);
                        var qtd_mes_3 = lista.ElementAt(11);
                        var qtd_mes_6 = lista.ElementAt(12);
                        var qtd_mes_12 = lista.ElementAt(13);
                        var data = lista.ElementAt(14);

                        var bd = new banco_produtos()
                        {
                            cod_produto = cod,
                            nm_produto = nome_prod,
                            cod_grupo = cod_grupo,
                            nm_grupo = nm_grupo,
                            ind_ativo = ind_ativo,
                            val_custo_unitario = Double.Parse(val_custo_unit),
                            val_lista_preco = val_custo,
                            perc_impostos = perc_imposto,
                            unidade_medida = unidade_med,
                            qtde_vendida_mes_1 = qtd_mes_1,
                            qtde_vendida_mes_2 = qtd_mes_2,
                            qtde_vendida_mes_3 = qtd_mes_3,
                            qtde_vendida_mes_6 = qtd_mes_6,
                            qtde_vendida_mes_12 = qtd_mes_12

                        };
                         //here i look in the DB if already exists the new product
                        var procura = banco.get_produto(cod);

                        if (procura == null)
                        {
                           // here is inserted to the db
                            banco.inserir_produto(bd);
                        }
                    }
                    valor += 1;
                }
            }
        }
    }
EN

回答 2

Stack Overflow用户

发布于 2018-08-29 20:27:09

我不确定将数据插入数据库的方法中包含了什么,但是SQLite和海量插入最常见的问题是SQLite在默认情况下使用事务包装每个插入,这会产生很大的开销。对于这种情况,一个很好的做法是为所有实例进行单事务处理,这将显著提高性能,请参阅example

票数 2
EN

Stack Overflow用户

发布于 2018-08-31 01:49:08

我按照@Dmytro说的做了,我使用了"insertORIgnore“方法。使用method.thank你的帮助,它改进了很多。

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

https://stackoverflow.com/questions/52076809

复制
相关文章

相似问题

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