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

江阴市网站建设东莞网站推广营销

江阴市网站建设,东莞网站推广营销,网站建设公司的市场营销方案模板下载,医疗器械一类二类三类的区别Steam 下载每次下次分配的硬盘空间通常是很小的,对比一些古董一般的游戏下载,需要将所有的游戏文件下载到本地,之后才能进行解压,这通常需要一倍以上的硬盘空间才能完成。而现代的游戏下载是一边下载一边解压,甚至下载…

Steam 下载每次下次分配的硬盘空间通常是很小的,对比一些古董一般的游戏下载,需要将所有的游戏文件下载到本地,之后才能进行解压,这通常需要一倍以上的硬盘空间才能完成。而现代的游戏下载是一边下载一边解压,甚至下载到一部分还进行部分游戏

在这对游戏的分块下载进行一定的猜想和复现。

实现分块压缩

要实现分块下载,就需要将游戏文件进行分割成各种大小不一的压缩包,每个压缩包可以单独解压。为了尽可能的将个个压缩包的大小接近一致,就需要设定一个阈值当将一部分的文件整合后的大小接近该阈值就将这部分的文件进行压缩成一个压缩包。

使用 C# 进行编码,获取文件夹下所有的文件并进行分组,当每个组的大小接近基准值的时候就返回该组。进行编组时有的单体文件本身就大于基准值这时候将该文件直接进行返回,让他一个文件作为一个组,如果对其进行分割的话就达不到每个压缩包可以单独解压的效果了

/// <summary>
/// 将文件分块(每个块总大小尽可能接近指定基准值)
/// </summary>
/// <param name="rootPath">根目录路径</param>
/// <param name="size">基准块大小(默认100MB)</param>
/// <returns>分块结果集合</returns>
public static IEnumerable<Chunk> CreateChunks(string rootPath, long size = 100 * 1024 * 1024) {// 遍历文件夹下所有的文件夹并进行封装为 Entityvar entities = Entity.Entities(rootPath).OrderByDescending(e => e.GetFileInfo().Length) // 大文件优先处理.ToList();var chunks = new List<Chunk>();var currentChunk = new List<Entity>();long currentSize = 0;var id = 1;foreach (var entity in entities) {// 处理单个文件超过基准大小的情况if (entity.FileSize > size) {// next chunkif (currentChunk.Count != 0) {chunks.Add(new Chunk(rootPath, currentChunk, id++));currentChunk =[];currentSize = 0;}// add entity to chunkchunks.Add(new Chunk(rootPath, [entity], id++));continue;}// 常规分块逻辑if (currentSize + entity.FileSize <= size) {currentChunk.Add(entity);currentSize += entity.FileSize;} else {// 判断最小与最大哪个离基准线近if (size - currentSize < currentSize + entity.FileSize - size) {// 最小的块离基准线近chunks.Add(new Chunk(rootPath, currentChunk, id++));currentChunk =[entity];currentSize = entity.FileSize;} else {// 最大的块离基准线近currentChunk.Add(entity);chunks.Add(new Chunk(rootPath, currentChunk, id++));currentChunk =[];currentSize = 0;}}}// 添加最后剩余的块if (currentChunk.Count != 0) {chunks.Add(new Chunk(rootPath, currentChunk, id));}return chunks;
}

处理好分组后,就可以对每个组进行压缩了。压缩后会产生多个压缩包,每个压缩包的大小都会尽可能的贴近基准值。


/// <summary>
/// 创建分块并压缩为zip文件
/// </summary>
/// <param name="rootDirPath">要压缩的文件夹路径</param>
/// <param name="outputDirPath">输出目录路径</param>
/// <param name="baseFileName">压缩文件名</param>
/// <param name="size">块大小(最低压缩基准线,如果单体文件大于基准线则单独压缩)</param>
/// <returns>json 结果</returns>
public static string CreateChunksZipFile(string rootDirPath, string? outputDirPath = null, string? baseFileName = null, long size = 512 * 1024 * 1024) {if (!Directory.Exists(rootDirPath)) throw new DirectoryNotFoundException("Directory not found.");outputDirPath ??= Path.Combine(rootDirPath, "fuck_zip_output");if (!Directory.Exists(outputDirPath)) Directory.CreateDirectory(outputDirPath);var start = DateTime.Now;var chunks = Chunk.CreateChunks(rootDirPath, size);var rootJson = new JsonObject();var rootJsonArray = new JsonArray();var entityCount = 0;var totalSize = 0L;foreach (var chunk in chunks) {if (baseFileName != null) chunk.BaseFileName = baseFileName;Console.WriteLine(chunk);entityCount += chunk.Entities.Count();totalSize += chunk.TotalSize;// 性能严重消耗处var zipArchive = chunk.ZipArchive(outputDirPath);var json = new JsonObject{{ "id", chunk.Id },{ "fileName", chunk.GetFileName() },{ "entityCount", entityCount },{ "size", chunk.TotalSize }};var entityJsonArray = new JsonArray();foreach (var entity in chunk.Entities) {var json2 = new JsonObject{{ "path", entity.RelativeFilePath },{ "hashcode", entity.GetHashcode() } // 性能严重消耗处};entityJsonArray.Add(json2);}json.Add("entities", entityJsonArray);// 性能严重消耗处json.Add("hashcode", HashCodeUtil.CalculateFileHash(zipArchive));rootJsonArray.Add(json);}rootJson.Add("chunks", rootJsonArray);rootJson.Add("count", rootJsonArray.Count);rootJson.Add("totalSize", totalSize);rootJson.Add("entityCount", entityCount);rootJson.Add("date", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));rootJson.Add("_output", outputDirPath);rootJson.Add("_timeConsuming", DateTime.Now.Subtract(start).TotalSeconds);rootJson.Add("_input", rootDirPath);// 生成最终 JSON 字符串(带缩进)var finalJson = rootJson.ToJsonString(new JsonSerializerOptions{WriteIndented = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping});// 写入文件var outputPath = Path.Combine(outputDirPath, "result.json");File.WriteAllText(outputPath, finalJson);Console.WriteLine($"{outputPath} created.");return finalJson;
}
http://www.dtcms.com/wzjs/482415.html

相关文章:

  • wordpress文章与页面seo刷网站
  • 站长工具之家自媒体135网站免费下载安装
  • 做网站App价格多少在线优化网站
  • 网站建设捌金手指花总十七网盘搜索神器
  • 环保企业网站建设现状什么是网站推广策略
  • 北京公司网站开发网络营销技术
  • 本田汽车网站建设百度app安装免费下载
  • 惠州网站制作软件苏州网站建设书生
  • 网站建设与运营 试题今天的国际新闻
  • 营销型网站建设明细报适合中层管理的培训
  • java做网站用什么软件软文编辑
  • 网站的排名就是友情链接软件开发需要多少资金
  • 网站建设 后端开发软件lpl赛区战绩
  • 网站要去公安局备案吗成都网站seo外包
  • 专业开发网站企业安徽seo优化
  • 做网站广告联盟合肥百度快照优化排名
  • 检察院做网站的目的营销推广公司案例
  • seo网站优化怎么做seoul是啥意思
  • 江苏省建设执业资格中心网站武汉网站维护公司
  • 佛山网站设计多少钱企业网站建设优化
  • 橙色网站设计今日国际重大新闻
  • 女人与狗做视频网站北京seo优化公司
  • 青岛做网站和小程序的公司靠谱的拉新平台
  • 外贸网站打开速度seo查询排名软件
  • 网站建设费能入长期待摊吗小广告清理
  • 乌鲁木齐网站设计公司品牌推广与传播
  • 英文网站建设详细方案百一度一下你就知道
  • 吉安哪里做网站广告平台推广渠道
  • 建设工程项目报建网站2022年每日新闻摘抄10一30字
  • 阿里云 网站备案百度应用宝