自定义文件解析器会随着每个下一个文件而变慢

伊沃·卡齐米尔斯

我构建了一个简单的文件解析器,它逐行读取 csv 文件并将其添加到数据库中。

在文件完全解析之后,我不会提交对数据库的更改。

它工作正常,但出于某种原因,每个下一个文件 - 解析变得越来越慢,这里是代码,非常欢迎有关如何加快速度的任何建议。

using Microsoft.VisualBasic.FileIO;
using System;
using System.IO;

namespace CsvToSQL
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            TransactionsEntities entities = new TransactionsEntities();

            string targetFolderPath = "C:\\Transactions\\";
            string[] allFiles = Directory.GetFiles(targetFolderPath);

            //Loop through files in folder
            foreach (var file in allFiles)
            {
                //parse file
                Console.WriteLine(file);
                using (TextFieldParser parser = new TextFieldParser(file))
                {
                    parser.TextFieldType = FieldType.Delimited;
                    parser.SetDelimiters(",");
                    int lineNo = 0;

                    while (!parser.EndOfData)
                    {

                        TransactionList transaction = new TransactionList();
                        //processing row
                        string[] fields = parser.ReadFields();
                        try
                        {
                         if(lineNo % 20 == 0)
                            {
                                Console.WriteLine(file + " Parsed line no: " + lineNo);
                            }   
                            transaction.Account = fields[0];
                            transaction.Timestamp = fields[1];
                            transaction.TransactionType = fields[2];
                            transaction.Status = fields[3];
                            transaction.Product = fields[4];
                            transaction.Price = fields[5];
                            transaction.BuySell = fields[6];
                            transaction.Series = fields[7];
                            transaction.Volume = fields[8];
                            transaction.FillVolume = fields[9];
                            transaction.OrderID = fields[10];
                            transaction.BestBid = fields[11];
                            transaction.BestAsk = fields[12];


                            entities.TransactionLists.Add(transaction);

                            lineNo++;



                        }
                        catch(Exception e)
                        {
                            Console.WriteLine(e.ToString());
                            Console.ReadKey();
                        }

                    }
                    try
                    {
                        entities.SaveChanges();
                    }catch(Exception e)
                    {
                        Console.WriteLine(e.ToString());
                        Console.ReadKey();
                    }



                }


            }
        }
    }
}
伊沃·卡齐米尔斯

大家好,我发现了内存问题 - 如果有人遇到类似的问题。

 TransactionsEntities entities = new TransactionsEntities();

这就是导致它如此令人难以置信地减速的原因。它使用与 DB 相同的连接将其替换为:

 using (TransactionsEntities entities = new TransactionsEntities()){
 //Transaciton parsing code for 1 file
 }
并且应用程序以 100 倍的速度浏览文件:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

解析器中的Parsec <|>选择,会引发错误,但不会转到下一个解析器

自定义列以查找下一个下一个最小值

PHP Html 解析器“查找下一个”

lxml(xml python解析器)转到下一个元素

自定义分页,用箭头代替下一个上一个

vue 自定义滑块,下一个和上一个按钮

为每个被压缩的文件指定一个自定义文件名

AWS Amplify上具有自定义服务器的下一个Js App主机

如何为自定义文件格式定义 ctag 解析器

jQuery将自定义标签移至下一个

jQuery Slide圆形按钮(下一个)自定义

我想在自定义php文件中为每个产品运行一个功能

fullcalendar - 将“上一个,下一个今天”按钮的位置更改为自定义选择器?

如何在 jar 文件中使用 Tika 自定义解析器?

自定义上一个/下一个分页图标背景颜色与Material UI

如何禁用自定义滑块中的“上一个”和“下一个”按钮?

Angular Primeng转盘-自定义上一个和下一个按钮

AngularJS UI轮播自定义上一个和下一个按钮

如何为该自定义滚动添加下一个和上一个按钮?

反应表中的自定义“上一个”和“下一个”文本

创建自定义分页,但是“下一个”和“上一个”按钮不起作用

在wordpress的下一个和上一个链接中显示自定义字段数据

具有自定义字段类别的下一个/上一个自定义帖子类型

仅解析xml文件中的下一个子级别类别

创建一个自定义的打字文件

Automapper自定义解析器

更改流上的下一个字符串的 C++ 自定义流操纵器

是否可以创建一个简单的解析器并创建一个javascript文件,然后使用该解析器调用该文件?

如何在MC查看器中为文件类型添加自定义解析器?