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

可信的邢台做网站企业推广软件有哪些

可信的邢台做网站,企业推广软件有哪些,网站开发工程师专业,asp.net获取网站虚拟目录文章目录 一、问题背景二、代码实现 一、问题背景 经常做 Android 应用的小伙伴应该会有经验,就是如果应用在写入文件的时候,即使写文件的动作是在子线程,也会出现 UI 上的卡顿,这是因为文件的 IO 是由内核去完成的,此…

文章目录

  • 一、问题背景
  • 二、代码实现

一、问题背景

经常做 Android 应用的小伙伴应该会有经验,就是如果应用在写入文件的时候,即使写文件的动作是在子线程,也会出现 UI 上的卡顿,这是因为文件的 IO 是由内核去完成的,此时 CPU 会从 用户态 切换到 内核态,应用将无法获得 CPU 时间片。如果 IO 较少的时候,这个切换不频繁,应用能有足够的时间片去执行绘制。但如果 IO 频繁,例如高速写入的场景下,此时 IO 占用的时间片增加,而我们知道 CPU 资源是有限的,此时会导致应用获得 时间片 将减少,导致 UI 绘制线程出现卡顿,进而影响 UI 上的卡顿。

我们可以使用 top 命令,查看 IO 占用 CPU 的时间片(即 iow):
在这里插入图片描述

因此,如果不能从其它方式去解决此问题(内核层的 IO 调度 和 CPU 调度机制),可以运用简单的方式:在写入文件的时候,限制写入速度,减缓 IO 占用率。

二、代码实现

例如,一个标准的拷贝文件的 Kotlin 方法如下:

originFile.inputStream().buffered().use { inputStream ->targetFile.outputStream().buffered().use { outputStream ->val buffer = ByteArray(1024)var bytesRead: Intwhile (inputStream.read(buffer).also { bytesRead = it } != -1) {outputStream.write(buffer, 0, bytesRead)}outputStream.flush()}
}

这个方法对 源文件 开启了 InputStream,并转换为 BufferInputStream,而对 目标文件 开启了 OutputStream,并转换为 BufferOutputStream,然后再从 InputStream 读取流,输出到 OutputStream,完成文件的读写。

而我们为了实现限制其写入速度,我们可以定义一个速率,例如每秒写入 20M,即每秒写入的字节数为 20 * 1024 * 1024 = 20, 971, 520 。在每次写入量达到 20M 的时候,检查一次写入这 20M 使用的时长,如果这个时长 < 1s ,则表示在这 1s 的时间里,写入的速率已经超过了 20M,需要等待一定时长,使其满足 1s 内只写入 20M 的需求。代码如下:

// 限制拷贝时的速率, 每秒最多拷贝的字节数
val MAX_COPY_SPEED = 20 * 1024 * 1024L// 记录已拷贝的文件大小
var copiedSize = 0L// 记录上次检查性能的时间 (用来计算拷贝速率 限制拷贝速率)
var lastCheckPerformanceTime = System.currentTimeMillis()
// 记录上次检查时 已拷贝的数据量
var lastCheckPerformanceSize = 0LoriginFile.inputStream().buffered(1024 * 1024).use { inputStream ->targetFile.outputStream().buffered().use { outputStream ->val buffer = ByteArray(DEFAULT_BUFFER_SIZE)var bytesRead: Intwhile (inputStream.read(buffer).also { bytesRead = it } != -1) {outputStream.write(buffer, 0, bytesRead)// 增加已拷贝文件的大小copiedSize += bytesRead// 计算拷贝速率 每满 MAX_COPY_SPEED 计算一次速率if (copiedSize - lastCheckPerformanceSize >= MAX_COPY_SPEED) {lastCheckPerformanceSize = copiedSizeval time = System.currentTimeMillis()// 计算写入 MAX_COPY_SPEED 字节数所使用的时间val deltaTime = time - lastCheckPerformanceTimelastCheckPerformanceTime = time// 如果速率大于 MAX_COPY_SPEED 则暂停 等待下次计算if (deltaTime < 1000) {// 延迟 1000 - deltaTime 使满足 1s 内只写入指定量delay(1000 - deltaTime)}}}outputStream.flush()}
}
http://www.dtcms.com/a/583241.html

相关文章:

  • 网站上面的水印怎么做的旅游景点网站模板大全
  • 三轴云台之坐标变换技术
  • 玉泉路网站制作aspnet东莞网站建设价格
  • 安康建设网站一个域名可以建几个网站
  • 焦作网站开发公司电话微网站建设比较全面的是
  • 嘉祥网站seo高德地图国际版
  • 【论文阅读】Towards Fair Federated Learning via Unbiased Feature Aggregation
  • 百度如何推广网站wordpress改语言
  • 做网站小程序php做网站用html做吗
  • 网站建设可行性报告自学程序员怎么入门
  • 高端定制网站的特点建设企业网站的需求分析
  • 浙江省工程建设质量管理协会 网站宁波网站建设开发公司
  • 从考试到实战:全面解析大模型的评估与基准测试体系
  • 【MySQL | 基础】概念
  • 大连地区建设网站怎么优化推广自己的网站
  • 设计微信公众号的网站吗网站建设维护招聘要求
  • 韩国平面设计网站php 抓取 wordpress 文字内容
  • 3800给做网站医院网站建设与管理ppt
  • 商城类网站功能wordpress增加底部导航
  • C语言复习二(2025.11.7)
  • Android Studio 多语言助手插件:让多语言管理变得简单高效
  • 京东的网站建设拓和科技有限公司网站
  • 中国铁路建设监理协会官方网站公司想建个网站
  • 凯里网站建设济宁市兖州区建设局网站
  • 北京网站建站系统平台新时代文明实践站网址
  • 如何更改网站源码用dw做的网站怎样弄上网上
  • 如何在局域网内做网站WordPress使用两个模板
  • 宝马itms做课网站老闵行小学排名
  • 天津建站费用企业网站设计目的和意义
  • 网站快速备案价格中国交通建设网官方网站