首页 > 其他分享 >Erlang 对dict、maps、array的部分性能测试

Erlang 对dict、maps、array的部分性能测试

时间:2023-05-29 17:57:20浏览次数:37  
标签:get maps dict array store Size

竖轴:时间(微秒)横轴(数据量)
备注(maps与dict的key是{name,整数}与整数在速度上差别不大,array的key是正整数)

结论

数据量在32-10000用maps的各种操作速度更快(但内存稍多,引用官方描述,此处没测)
数据量1万以上,如果键是正整数,array与maps性能相当(官方推荐用array)
数据量接近32个的时候是maps速度最差的时候

数据

数据规模 dict_from_list map_from_list array_from_list dict_store map_store array_store dict_get map_get array_get
500000 10297100 125000 15000 21124886 1061986 1079010 828007 218000 359999
100000 546995 30999 16000 6890939 1030991 1078009 327997 217998 359003
50000 188000 15000 0 4016023 875004 1063006 359001 125000 375001
10000 16000 0 0 1140008 516004 1000007 312002 94000 360002
1000 0 0 0 687009 250003 985013 250003 94001 359004
100 0 0 0 641001 187000 969001 234000 63000 359000
32 0 0 0 515000 422000 953001 172000 312000 360000
10 0 0 0 467994 171998 1014988 156998 139998 359996

环境

设备名称 DESKTOP-KM7LG14
处理器 Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz 3.19 GHz
机带 RAM 16.0 GB
设备 ID 4EABE4D6-DF57-4C5E-8606-7160E603E929
产品 ID 00330-50000-00000-AAOEM
系统类型 64 位操作系统, 基于 x64 的处理器
笔和触控 没有可用于此显示器的笔或触控输入
版本 Windows 10 专业版
版本号 21H1
安装日期 ‎2020/‎11/‎23
操作系统内部版本 19043.1348
体验 Windows Feature Experience Pack 120.2212.3920.0

代码


dmt(Size, N) ->
    {TD, D} = timer:tc(dict, from_list, [[{{dict, I}, I} || I <- lists:seq(1, Size)]]),
    {TM, M} = timer:tc(maps, from_list, [[{{maps, I}, I} || I <- lists:seq(1, Size)]]),
    {TA, _A} = timer:tc(array, from_list, [lists:seq(1, Size)]),
    {TA2, A2} = timer:tc(?MODULE, array_store, [N, Size, array:new()]),
    {TD1, _} = timer:tc(?MODULE, dict_get, [N, Size, D]),
    {TM1, _} = timer:tc(?MODULE, maps_get, [N, Size, M]),
    {TA1, _} = timer:tc(?MODULE, array_get, [N, Size, A2]),
    {TD2, _} = timer:tc(?MODULE, dict_store, [N, Size, dict:new()]),
    {TM2, _} = timer:tc(?MODULE, maps_store, [N, Size, maps:new()]),
    io:format("Size-~p N-~p:init[~p:~p:~p] store[~p:~p:~p] get[~p:~p:~p]", [Size, N, TD, TM, TA, TD2, TM2, TA2, TD1, TM1, TA1]).

dict_get(N, Size, Dict) ->
    dict:find({dict, (N rem Size) bor (2001 bsl 23)}, Dict),
    if  
        N > 0 ->
            dict_get(N - 1, Size, Dict);
        true ->
            ok
    end.


maps_get(N, Size, Map) ->
    maps:find({maps, (N rem Size) bor (2001 bsl 23)}, Map),
    if  
        N > 0 ->
            maps_get(N - 1, Size, Map);
        true ->
            ok
    end.

dict_store(N, Size, Dict) ->
    K = (N rem Size) bor (2001 bsl 23),
    Dict1 = dict:store({dict, K}, K, Dict),
    if  
        N > 0 ->
            dict_store(N - 1, Size, Dict1);
        true ->
            Dict1
    end.


maps_store(N, Size, Map) ->
    K = (N rem Size) bor (2001 bsl 23),
    Map1 = maps:put({maps, K}, K, Map),
    if  
        N > 0 ->
            maps_store(N - 1, Size, Map1);
        true ->
            Map1
    end.

array_get(N, Size, Array) ->
    catch array:get((N rem Size) bor (2001 bsl 23), Array),
    if 
        N > 0 ->
            array_get(N - 1, Size, Array);
        true ->
            ok
    end.

array_store(N, Size, Array) ->
    K = (N rem Size) bor (2001 bsl 23),
    Array1 = array:set(K, N, Array),
    if 
        N > 0 ->
            array_store(N - 1, Size, Array1);
        true ->
            Array1
    end.

标签:get,maps,dict,array,store,Size
From: https://www.cnblogs.com/jsom/p/17441219.html

相关文章

  • 10ArrayList&学生管理系统
    1.ArrayList集合和数组的优势对比:长度可变,自动扩容。添加数据的时候不需要考虑索引,默认将数据添加到末尾1.1ArrayList类概述什么是集合​ 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变ArrayList集合的特点​ 长度可以变化,只能存储引用数据类型。在存......
  • ArrayList的实现原理
    一、 ArrayList概述:  ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。   ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(Listl)函数返回一个线程安全的ArrayList......
  • DataFrame转为数组Array
    DataFrame转为数组Array有文本数据如下:目标:将文本数据以数组形式呈现步1:读入数据importpandasaspddata=pd.read_table(file_path,sep=',',header=None)数据呈现如下:步2:将dataframe转为数组data_x=np.array(data[0].tolist())data_y=np.array(data[1].tol......
  • Arraylist1
    importjava.time.LocalDate;importjava.util.ArrayList;importjava.util.List;publicclassList1{publicstaticvoidmain(String[]args){//集合类(collection):长度可变,不同类型//1--创建对象ArrayListarrayList=newArrayList();//创建对象(......
  • LeetCode-Java题解 977. Squares of a Sorted Array
    题目地址:977.SquaresofaSortedArray解题思路:    又是一道双指针的题目,看见秒想到双指针(平方直接调用sort方法也行,但是这么写这题就没意思了)。但是,我一直在想,不增加空间消耗的情况下,如何进行排列,想了半天把自己绕进去了。开辟一个新数组,倒序放置就非常简单了。一定要利......
  • 错误解决:These dependencies were not found: core-js/modules/es.array.push.js
    错误描述执行npmrundev后报错:Thesedependencieswerenotfound:core-js/modules/es.array.push.jsin./node_modules/@babel/runtime/helpers/objectSpread2.js,./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-pluvue?vue&type=script&la......
  • php中array用法
    在PHP中,array是一种非常重要的数据类型,通常用于存储和操作多个值。使用array可以将多个变量组合成单个便于管理的结构,并通过索引、键或其他方式进行访问和操纵。以下是一些PHP中array的常见用法:创建一个空的数组php复制代码$arr=array();创建一个包含多个元素的数组ph......
  • [ARC160F] Count Sorted Arrays
    ProblemStatementThereareaninteger$N$and$M$pairsofintegers:$(a_1,b_1),(a_2,b_2),\dots,(a_M,b_M)$.Eachpair$(a_i,b_i)$satisfies$1\leqa_i\ltb_i\leqN$.Initally,youhaveall$N!$permutationsof$(1,2,\dots,N)$.Youwillperf......
  • CF482B Interesting Array Solution
    构造一个数组,给出了\(m\)条限制,要求\([l,r]\)内的数按位与的值为\(x\)。按位考虑,对于\(x\)的每个位,\([l,r]\)的数在这一个位下都应该是\(1\),否则就无法满足它们的与的值为\(x\)。构造出来的数组并不一定是满足条件的。所以在所有的操作完后还要验证构造的数组是否......
  • MapStructPlus 1.2.5 发布,新增 Solon 支持
    MapStructPlus1.2.5发布,更新内容如下:fix:解决MapConvertMapperAdapter编译警告问题feat:增加nullValueMappingStrategy和nullValuePropertyMappingStrategy配置项feat:适配solon主要更新内容为适配Solon,使用方式基本等同于SpringBoot环境下的使用方式。与其......