当前位置: 首页 > wzjs >正文

做网站赚钱缴税吗做网站沧州

做网站赚钱缴税吗,做网站沧州,自媒体一号WordPress主题,如何建立网站数据库连接需求: 在项目开发中,我们会遇到单个文件大小超过1TB的文件,这样的文件只能进行单文件读取,往往会造成读取完成耗时过长,导致客户在使用体验过程中不满意。 为了解决提升大文件的解析速度,我想到了先分割大文…

需求:

        在项目开发中,我们会遇到单个文件大小超过1TB的文件,这样的文件只能进行单文件读取,往往会造成读取完成耗时过长,导致客户在使用体验过程中不满意。

        为了解决提升大文件的解析速度,我想到了先分割大文件为小文件,之后进行并行多个文件同时解析入库方案。

        那么,怎么才可以把一个大文件分割为多个小文件呢?

        如果我按照大小来控制分割出来的小文件,会造成文件的丢失问题,如果按照行数来分割,一行一行进行读取务必会造成分割文件耗时过长。

        讨论:如果一个1TB的文件,我们按照大小来控制文件个数,假设每个分割出来的文件大小为200M,这样的话1TB分割出来约5200个文件,这样子的话最多造成约10000行信息被破坏,可以忽略不计。

        所以我们为了减少分割文件带来的耗时时间长度,采取分割方案采用定长控制分割出来的文件大小。

实现方案1:

一次性读取1M,直到读取到200M为止,开始写入下一个分割文件。
using (FileStream readerStream = new FileStream(file, FileMode.Open, FileAccess.Read))
            {
                // 如果大于1GB
                using (BinaryReader reader = new BinaryReader(readerStream))
                {
                    int fileCursor = 0;
                    int readerCursor = 0;
                    char[] buffer = new char[1024 * 1024];
                    int length = 0;

                NextFileBegin:
                    string filePath = string.Format(splitFileFormat, fileCursor);

                    Console.WriteLine("开始读取文件【{1}】:{0}", filePath, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                    using (FileStream writerStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write))
                    {
                        using (BinaryWriter writer = new BinaryWriter(writerStream))
                        {
                            while ((length = reader.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                readerCursor++;

                                writer.Write(buffer, 0, length);

                                if (readerCursor >= splitFileSize)
                                {
                                    Console.WriteLine("结束读取文件【{1}】:{0}", filePath, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));

                                    readerCursor = 0;
                                    fileCursor++;

                                    goto NextFileBegin;
                                }
                            }
                        }
                    }
                }
            }


实现方案2:

一次性读取200M,立即写入分割文件,开始下一个分割文件操作。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Configuration;

namespace BigFileSplitTest
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             *  <!--是否开启大文件分隔策略-->
                <add key="BigFile.Split" value="true"/>
                <!--当文件大于这个配置项时就执行文件分隔,单位:GB -->
                <add key="BigFile.SplitMinFileSize" value="10" />
                <!--当执行文件分割时,每个分隔出来的文件大小,单位:MB -->
                <add key="BigFile.SplitFileSize" value="200"/>
             *  <add key="BigFile.FilePath" value="\\172.x1.xx.xx\文件拷贝\xx\FTP\xx\2016-04-07\x_20160407.txt"/>
                <add key="BigFile.FileSilitPathFormate" value="\\172.x1.xx.xx\文件拷贝\liulong\FTP\xx\2016-04-07\x_20160407{0}.txt"/>
             */

            string file = ConfigurationManager.AppSettings.Get("BigFile.FilePath");
            string splitFileFormat = ConfigurationManager.AppSettings.Get("BigFile.FileSilitPathFormate");
            int splitMinFileSize = Convert.ToInt32(ConfigurationManager.AppSettings.Get("BigFile.SplitMinFileSize")) * 1024 * 1024 * 1204;
            int splitFileSize = Convert.ToInt32(ConfigurationManager.AppSettings.Get("BigFile.SplitFileSize")) * 1024 * 1024;

            FileInfo fileInfo = new FileInfo(file);
            if (fileInfo.Length > splitMinFileSize)
            {
                Console.WriteLine("判定结果:需要分隔文件!");
            }
            else
            {
                Console.WriteLine("判定结果:不需要分隔文件!");
                Console.ReadKey();
                return;
            }

            int steps = (int)(fileInfo.Length / splitFileSize);
            using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader br = new BinaryReader(fs))
                {
                    int couter = 1;
                    bool isReadingComplete = false;
                    while (!isReadingComplete)
                    {
                        string filePath = string.Format(splitFileFormat, couter);
                        Console.WriteLine("开始读取文件【{1}】:{0}", filePath, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));

                        byte[] input = br.ReadBytes(splitFileSize);
                        using (FileStream writeFs = new FileStream(filePath, FileMode.Create))
                        {
                            using (BinaryWriter bw = new BinaryWriter(writeFs))
                            {
                                bw.Write(input);
                            }
                        }

                        isReadingComplete = (input.Length != splitFileSize);
                        if (!isReadingComplete)
                        {
                            couter += 1;
                        }
                        Console.WriteLine("完成读取文件【{1}】:{0}", filePath, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                    }
                }
            }


            Console.WriteLine("分隔完成,请按下任意键结束操作。。。");
            Console.ReadKey();

        }
    }
}

从实验结果发现:方案一的性能较方案二的性能约耗时10倍。

具体原因为什么?请思考下:

一次性读取1M,直到读取到200M为止,开始写入下一个分割文件。

一次性读取200M,立即写入分割文件,开始下一个分割文件操作。

参考:https://www.cnblogs.com/yy3b2007com/p/5558877.html

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 


文章转载自:

http://rb0P42na.rcjyc.cn
http://6vaAE3qQ.rcjyc.cn
http://gfCPnNyZ.rcjyc.cn
http://LShX1bny.rcjyc.cn
http://VrLgNN9t.rcjyc.cn
http://jQzEXOeE.rcjyc.cn
http://cWhJPyP8.rcjyc.cn
http://Kpb2v9hH.rcjyc.cn
http://vtGOQQzv.rcjyc.cn
http://Ai3yXWic.rcjyc.cn
http://jTFn89p4.rcjyc.cn
http://Yz8JCauY.rcjyc.cn
http://kX9eiDzA.rcjyc.cn
http://GWuURGVI.rcjyc.cn
http://EGT19zAU.rcjyc.cn
http://Ziu75Qde.rcjyc.cn
http://YxmZTW1R.rcjyc.cn
http://y34CEmPy.rcjyc.cn
http://iNopbdOD.rcjyc.cn
http://LbDskX9w.rcjyc.cn
http://ryuloADU.rcjyc.cn
http://JG6bE95L.rcjyc.cn
http://FZxHaDEK.rcjyc.cn
http://6VUaw6Ir.rcjyc.cn
http://UWgl6uAG.rcjyc.cn
http://FTqVZGLI.rcjyc.cn
http://FIYp0L0M.rcjyc.cn
http://agqjtSeO.rcjyc.cn
http://eEQxycA4.rcjyc.cn
http://UiaKmrOw.rcjyc.cn
http://www.dtcms.com/wzjs/628348.html

相关文章:

  • 网站域名 安全网线制作排序
  • 网站开发的心得体会wordpress更换主题打不开
  • 凡科建设网站如何工信部网站备案查询 验证码错误
  • 西宁做网站君博优选国家企业信用信息公示网官网查询
  • 如何写一份企业网站建设方案免费 网站 模板
  • 海口网站设计建设聊城网站建设找谁
  • 湛江做网站公司西安网站维护推广
  • 全球军事网站更改wordpress语言
  • 有没有做皮艺的网站素材网站排行榜前十名
  • 网站备案抽查巩义在线
  • 长沙天津网站建设长沙网络推广平台
  • 网站文档怎么加图片不显示不出来滁州森沃纸质包装有限公司
  • 电影网站建设内容有找猎聘网站做简历优化的
  • 海外免费域名登封搜索引擎优化
  • 建网站算法装修平台加盟
  • 网站域名及空间购买store软件下载
  • 网站改版准备冷链物流
  • 邢台手机网站建设服务博山区住房和城乡建设局网站
  • 烟台网站制作维护建设网站哪些好
  • 企业网站管理规定页面编辑wordpress
  • 小米的网站建设的要点今天广州新增确诊最新消息
  • 网站开发人员的工资最新网游网络游戏
  • 上海网站建设千元漂亮logo设计公司哪家好
  • 网站推广优化的公司推广引流吸引人的文案
  • 中山企业建站程序上海网页制作费用
  • 案例学习网站建设方案摸摸学校宁波全网营销型网站建设
  • 西安网站维护云上网站做等保
  • 网站建设升级流量推广团队是干嘛的
  • 河南网站建设工作室网站规划说明
  • 确定网站建设的目的如何选择网站建设流程