Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不对所有球拍中的人进行序列功能呢?

为什么不对所有球拍中的人进行序列功能呢?
EN

Stack Overflow用户
提问于 2016-08-19 19:33:50
回答 1查看 91关注 0票数 1

在球拍中使用序列长度、序列引用、序列映射等,而不是对列表(长度列表-引用等)、字符串(字符串长度、字符串-引用等)、向量等使用不同的函数,有什么缺点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-19 20:06:06

性能.

考虑一下这个小小的基准:

代码语言:javascript
运行
AI代码解释
复制
#lang racket/base

(require racket/sequence)

(define len 10000)
(define vec (make-vector len))

(collect-garbage)
(collect-garbage)
(collect-garbage)

(time (void (for/list ([i (in-range len)])
              (vector-ref vec i))))

(collect-garbage)
(collect-garbage)
(collect-garbage)

(time (void (for/list ([i (in-range len)])
              (sequence-ref vec i))))

这是我机器上的输出:

代码语言:javascript
运行
AI代码解释
复制
; vectors (vector-ref vs sequence-ref)
cpu time: 1 real time: 1 gc time: 0
cpu time: 2082 real time: 2081 gc time: 0

是的,相差三个数量级。

为什么?嗯,racket/sequence并不是一个非常“聪明”的API,即使向量是随机访问,sequence-ref也不是。结合Racket优化器对原始操作进行严重优化的能力,sequence是一个非常糟糕的接口。

当然,这有点不公平,因为向量是随机访问的,而像列表这样的东西则不是。然而,执行与上面的测试完全相同的测试,但使用列表而不是向量仍然会产生相当可怕的结果:

代码语言:javascript
运行
AI代码解释
复制
; lists (list-ref vs sequence-ref)
cpu time: 113 real time: 113 gc time: 0
cpu time: 1733 real time: 1732 gc time: 0

序列API是缓慢的,主要是由于高度的间接。

现在,性能本身并不是直接拒绝API的理由,因为在更高层次的抽象中工作有具体的优势。尽管如此,我认为序列API不是一个很好的抽象,因为它:

  1. …在其实现中是不必要的有状态的,这给接口的实现者带来了不必要的负担。
  2. …不适合与列表不相似的内容,如随机访问向量或哈希表。

如果您想使用更高级别的API,一种可能的选择是使用 package,它尝试提供类似于racket/sequence的API,但可以容纳更多类型的数据结构,并且具有更完整的功能集。免责声明:我是collections软件包的作者。

考虑到上面的基准,性能仍然比直接使用底层函数差,但至少更易于管理:

代码语言:javascript
运行
AI代码解释
复制
; vectors (vector-ref vs ref)
cpu time: 2 real time: 1 gc time: 0
cpu time: 97 real time: 98 gc time: 10

; lists (list-ref vs ref)
cpu time: 104 real time: 103 gc time: 0
cpu time: 481 real time: 482 gc time: 0

你是否负担得起费用取决于你到底在做什么,这取决于你自己打电话。只要执行某种动态调度,专门操作总是比服从它们的操作要快一些。和往常一样,记住性能优化的规则:不要猜测,度量。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39050201

复制
相关文章
Spring中的AOP——在Advice方法中获取目标方法的参数
访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点。JoinPoint里包含了如下几个常用的方法:
林老师带你学编程
2019/05/25
6.4K0
Kotlin在协程中使用Select表达式选择最快结果
Kotlin在1.6时增加了Select的表达式,可以同时等待多个挂起函数,并选择第一个可用的。其实就是说在并行的运算中,直接返回最快的结果。
Vaccae
2022/12/29
6760
Kotlin在协程中使用Select表达式选择最快结果
Java中判断平年闰年最快方法
使用isLeap ,如果为true,那么是闰年,否则为平年 . isLeap需要Year来使用 import java.time.Year; public class Test { public static void main(String[] args) { Year year = Year.of(2000); System.out.println(year.isLeap()); } }
编程张无忌
2021/03/07
1.1K0
最快速获取全国及全球省市区信息的方法。
最近需要做一个省市区选择的功能,突然想起之前在哪里看见过qq这个工具免费给我提供了文件的。可是想不起来在哪里,在网上找了下相关文章,似乎没有合适的,然后凭着记忆力去qq的安装路径下找了下,终于找到了。
易兒善
2018/08/21
1.2K0
最快速获取全国及全球省市区信息的方法。
在机器学习中处理大量数据!
知乎 | https://zhuanlan.zhihu.com/p/357361005
Datawhale
2021/03/26
2.4K0
在机器学习中处理大量数据!
getBoundingClientRect方法获取元素在页面中的相对位置
获取元素位置可以用 offset 或 getBoundingClientRect,使用 offset 因为兼容性不好,比较麻烦,offset获取位置会形成“回溯”。而 getBoundingClientRect 方法则 兼容性较好,基本所有的浏览器都支持了,且使用起来更容易和简单。
用户6167509
2019/09/04
4.2K0
mysql 获取分组中最新记录SQL写法示例 select group by order by
and it is producing the correct results however they are not in the correct order.
一个会写诗的程序员
2020/05/18
2.7K0
BeautifulSoup解析库select方法实例——获取企业信息
本文内容由浙江浦江中学方春林老师提供。 Requests 是用Python语言编写,基于urllib,采用Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以
Python小屋屋主
2018/04/16
8960
BeautifulSoup解析库select方法实例——获取企业信息
最快的 Hexo 博客搭建方法
使用 Cloud Studio ,就不需要再折腾 Hexo 环境,不需要再解决不同平台上的各种冲突,直接在 Cloud Studio 里面即可进行 Hexo 的写作和部署。
腾讯云 CODING
2019/09/16
1.2K0
最快的 Hexo 博客搭建方法
记录GOPATH在GOLAND中的坑
这里的GOPATH已经出错了,所以编译找不到,我检查了go env也是正确的GOPATH....
超蛋lhy
2018/08/31
1.9K0
记录GOPATH在GOLAND中的坑
[cloc]在Windows中配置cloc的记录
https://github.com/AlDanial/cloc/releases
逝水经年
2022/03/14
3K0
js:如何获取select选中的值
<select id=”select”> <option value=”A” url=”http://www.baidu.com”>第一个option</option> <option value=”B” url=”http://www.qq.com”>第二个option</option> </select> 一:JavaScript原生的方法
全栈程序员站长
2022/11/04
27.8K0
最快的 Hexo 博客搭建方法
使用 Cloud Studio ,就不需要再折腾 Hexo 环境,不需要再解决不同平台上的各种冲突,直接在 Cloud Studio 里面即可进行 Hexo 的写作和部署。
全栈程序员站长
2022/06/29
8330
最快的 Hexo 博客搭建方法
vue中同时获取select下拉框的值和文本
在下是首席架构师
2023/07/04
2.2K0
vue中同时获取select下拉框的值和文本
antd的select 的key 和value获取
*默认情况下 onChange 里只能拿到 value,如果需要拿到选中的节点文本 label,可以使用 labelInValue 属性。 选中项的 label 会被包装到 value 中传递给 onChange 等函数,此时 value 是一个对象
用户4344670
2020/02/13
10.4K0
antd的select 的key 和value获取
Hive中SELECT TOP N的方法(order by与sort by)
版权声明:本文为博主-姜兴琪原创文章,未经博主允许不得转载。 https://blog.csdn.net/jxq0816/article/details/87784068
week
2019/03/14
3.9K0
OrientDB显示记录SELECT命令的基本语法
在检索记录时,我们有不同的查询变体或选项以及select语句,以下语句是SELECT命令的基本语法。
用户4988376
2021/08/13
1.3K0
laravel-admin select、multipleSelect从api中获取选项列表
select、multipleSelect从api中获取选项列表 $form->select($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name']); 或者从api中获取选项列表: $form->select($column[, $label])->options('/api/users'); 其中api接口的格式必须为下面格式: [ { "id": 9, "tex
友儿
2022/09/11
4.1K0
vue中获取外网IP的方法
之前有篇文章js获取客户端真实IP记录了如何获取外网IP 那个只是在普通html页面当中的获取方法,在vue项目中就不能这么使用了。
薛定喵君
2020/08/12
6.3K2
点击加载更多

相似问题

在SQL中向表中插入大量记录的最快方法

71

在mysql中获取记录数的最快方法

32

使用MySQL在JDBC中运行大量SELECT查询的最快方法是什么?

137

这是在MySQL中获取记录的最快方法吗

32

使用ActiveRecords和Rails获取大量记录的最快方法(find_each很慢)

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档