我有一个CSV类型的Unicode文本文件,实际上包含两个浮点值(x
和y
),一个int(i
)和两个字符串({{1每行和s
)。这些行按第一个浮点值排序,但我还没有使用它。
任务是提取具有指定范围(t
和xmin < x < xmax
)中浮点值的所有行。想想对周围物品的几何搜索。
由于文件相当大(130万行,67 MB),我不想一次将其读入内存。相反,我使用了提供here的ymin < y < ymax
类。
对于性能测试,我实现了几个不同的功能:
StreamReader
/ Python元组)过滤(A)通过字符串比较完成,而不是首先将字符串值转换为浮点数。过滤(B)进行浮点转换和浮点比较。根据需要进行转换/比较,即仅处理struct
;仅当x
已匹配时才会处理y
。
在iMac上测试我的功能时,我得到以下结果(约):
默认调试配置(无优化):
默认发布配置(优化的-Os):
为了比较,在Python中做同样的事情产生:
性能限制约为2000k line / s(即提取应在<1秒内完成)。
很难相信编译的Swift程序比解释的Python脚本(实际上是字节代码)慢得多,重要的例外是本地计算的运行。
如何改善Swift计划的糟糕表现?有没有人获得过这类问题的经验?
通常可以采取哪些措施来提高功能效率?
x
实施效果不尽如人意?StreamReader
值超过匹配间隔时结束扫描,平均时间可减半。x
导航值对文件编制索引。