一个超级大的文件如何更快读

这篇具有很好参考价值的文章主要介绍了一个超级大的文件如何更快读。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一个超级大的文件如何更快读

问题起因

一个超级大的文件如何更快读

一个有千万的数据的txt文件如何发挥IO的全部性能更快的读和写。

方案一

使用ChatGPT4的方案

在C#中,我们可以使用多线程来处理大量的数据并将其写入数据库。在处理大数据时,我们需要将任务分解为多个子任务,这样我们可以在不同的线程中并行执行它们以提高性能。

这里是一种可能的解决方案,使用了Task Parallel Library (TPL)来实现多线程。假设我们使用的是SQL Server数据库,并且我们正在处理的文件是TSV(Tab-Separated Values)文件。

using System;
using System.IO;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Collections.Concurrent;

class Program
{
    static void Main()
    {
        string path = "yourFile.tsv";
        ConcurrentQueue<string[]> queue = new ConcurrentQueue<string[]>();

        var producer = Task.Run(() =>
        {
            using (var reader = new StreamReader(path))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    var fields = line.Split('\t');
                    queue.Enqueue(fields);
                }
            }
        });

        var consumers = new Task[4];
        for (int i = 0; i < consumers.Length; i++)
        {
            consumers[i] = Task.Run(() =>
            {
                string connString = "Your connection string";
                using (var conn = new SqlConnection(connString))
                {
                    conn.Open();
                    while (true)
                    {
                        if (queue.TryDequeue(out string[] fields))
                        {
                            using (var cmd = new SqlCommand("Your insert command", conn))
                            {
                                // Update parameters in cmd using fields
                                cmd.ExecuteNonQuery();
                            }
                        }
                        else if (producer.IsCompleted)
                        {
                            break;
                        }
                    }
                }
            });
        }

        Task.WaitAll(consumers);
    }
}

在上面的代码中,我们首先创建了一个生产者任务,该任务从TSV文件中读取每一行,然后将每一行分割为字段,并将结果存入队列。然后我们创建了4个消费者任务,每个消费者任务都从队列中

题外话题

如果这个文件是按照行去分割数据如何利用多线程去发挥更高性能?

讨论 采用偏移值去分多个任务读,并且需要解决偏移值不一定还在每一行中的位置,使用需要设计好如何解决偏移值的位置问题。

首先规定任务的偏移值提供案例:

[
	{
	"start":0,
	"end":10000
	},
	{
	"start":10001,
	"end":20000
	},
	{
	"start":20001,
	"end":30000
	},
	{
	"start":30000,
	"end":40000
	}
]

在这里提供了四个任务,每一个任务的偏移值都是固定的,请注意,我们的文件的数据是按照每个换行符去分割数据,如果使用了偏移值,我们无法保证偏移值的位置一定是每一行的开头,这个时候需要注意如何处理偏移值的问题,下面我提供一个简单的解决方法,采用伪代码

var data = new object []{
   
	{
	"start":0,
	"end":10000
	},
	{
	"start":10001,
	"end":20000
	},
	{
	"start":20001,
	"end":30000
	},
	{
	"start":30000,
	"end":40000
	}
}

// 处理偏移值的方法

// 提供多个线程任务去并发执行读

通过伪代码我们可以看到,解决偏移值的问题是由先提供一个方法,将每一个偏移值去先处理一边在去执行任务。这样就可以解决问题。

这个属于题外话题。如果大佬们有其他想法也可以讨论,话题不在意IO的瓶颈,如何更快的读文章来源地址https://www.toymoban.com/news/detail-475505.html

到了这里,关于一个超级大的文件如何更快读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nuxt打包后文件过大的优化

    在使用nuxt.js来做项目的时候,遇到了加载缓慢的问题。解决思路如下 1、大文件拆分 2、文件压缩 通过nuxt build --analyze或者nuxt build -a命令来启用 在package.json中 添加–analyze,然后执行npm run build 打包后如下: 拆分前的 在实际应用中,加载较大体积的资源耗费的时间也会相对较

    2024年02月10日
    浏览(46)
  • 如何让电脑运行更快

    让电脑运行更快的方法如下: 一.减少开机启动项,方法:开始-运行-输入\\\"msconfig\\\",选择\\\"启动项\\\",把不需要开机启动的前面勾去掉(只保留ctfmonXP输入法)即可。 二. 关闭系统属性中的特效,这可是简单有效的提速良方。右键我的电脑--属性--高级--性能--设置--在视觉效果中,设置为调

    2024年02月08日
    浏览(73)
  • uniapp 上传比较大的视频文件就超时

    uni.uploadFile,上传超过10兆左右的文件就报错err:uploadFile:fail timeout,超时 解决: 在manifest.json文件中做超时配置

    2024年02月11日
    浏览(71)
  • Python代码打包成EXE可执行文件(避开打包文件太大的坑)

    ​​​​​​​ 目录 一、博主的成长经历  二、虚拟环境下打包的好处  三、pyinstaller的基础用法 四、虚拟环境打包操作实例 五、成果展示 欢迎大家来观栏~  ——随乔木凉夏 博主最初使用pyinstaller打包py文件的时候,用的很是顺心,命令行复制粘贴,回车键一敲,不用多久

    2024年02月09日
    浏览(47)
  • ​如何选择更快更稳定的存储服务器​

    如何选择更快更稳定的存储服务器 选择更快、更稳定的存储服务器需要考虑以下几个方面: 存储介质:存储服务器的主要存储介质包括固态硬盘和机械硬盘。相比于机械硬盘,固态硬盘具有更高的读写速度和更低的延迟,因此能够提供更快的数据传输和更高的响应速度。如

    2024年02月07日
    浏览(40)
  • zkLogin如何使加密学变得更快更安全

    *本篇来自Mysten Labs官方blog,文中“我们”指代该组织。 zkLogin不仅是将更多用户引入Web3应用的一次革命性飞跃,其开发还使零知识(ZK)API变得更安全更快速。然而,开发zkLogin,Sui的OAuth认证原语,绝非易事。除了系统设计上的挑战外,还需要对外部ZK证明和加密库进行多方

    2024年02月22日
    浏览(37)
  • 解决gitee仓库中 .git 文件夹过大的问题

    最近,许多项目都迁移到gitee。使用的也越来越频繁,但是今天突然收到一个仓库爆满的提示。让我一脸懵逼。本文将详细为你解答,这种情况如何处理。 我收到的报错如下: 看了下,大概意思是一个仓库体积最大不能超过1GB,但是现在我已经超过3GB了。。。 我第一个想法

    2024年02月03日
    浏览(55)
  • 如何在 Blender 中更快地渲染?这些技巧需要知道

    Blender 是一款开源 3D 建模和动画软件,动画艺术家、产品设计师和游戏创作者经常使用。Blender 不仅允许用户创建 2D 对象或角色并对其进行动画处理以获得 3D 模型,而且 Blender 背后还有强大的艺术家和计算机科学家社区,不断改进代码以提供功能强大的软件,而无需高昂的价

    2024年02月15日
    浏览(69)
  • 瘦身.git,处理项目中.git文件夹过大的问题

    出现原因: .git文件主要用来记录每次提交的变动,当我们在提交时包含大文件时,会被git记录下来, .git文件越来越大、越来越繁重。。。 一:将项目切换至master分支 二:删除存储的大文件 方法(1): 方法(2):前提是知道要删除的大文件 三:查看瘦身后的.git文件大小

    2024年02月16日
    浏览(51)
  • git仓库清理瘦身解决 .git文件夹过大的问题

    git仓库清理找了很多资料和方案都没有很完美执行成功的;现在找到一个完美方案,分享给大家;希望能帮助大家 1、gitlab代码开发了仓库开发了五年了,代码只有10M;clone的时候要700多兆很浪费时间 2、创建分支和切换分支耗时,导致电脑崩溃 3、公司内部接入codereview服务;

    2024年02月02日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包