Kotlin i.inc()比i慢10倍+;?
所以今天我了解了kotlin中的num.inc()特性,并决定在代码中实现它。不用说,这使我的代码的延迟时间增加了10倍(从~400毫秒增加到4000毫秒以上) 以下是我的传统方式(i++,400ms)的示例Kotlin i.inc()比i慢10倍+;?,kotlin,Kotlin,所以今天我了解了kotlin中的num.inc()特性,并决定在代码中实现它。不用说,这使我的代码的延迟时间增加了10倍(从~400毫秒增加到4000毫秒以上) 以下是我的传统方式(i++,400ms)的示例 package com.beudoin 导入java.io.BufferedWriter 导入java.io.FileInputStream 导入java.io.FileWriter 导入java.nio.channels.FileChannel 趣味主线(args:Array){ val
package com.beudoin
导入java.io.BufferedWriter
导入java.io.FileInputStream
导入java.io.FileWriter
导入java.nio.channels.FileChannel
趣味主线(args:Array){
val s=System.currentTimeMillis()
val channel=FileInputStream(“client.dll”).channel
val buffer=channel.map(FileChannel.MapMode.READ_ONLY,0,channel.size())
val数据=字节数组(buffer.capacity())
buffer.get(数据)
val writer=BufferedWriter(FileWriter(“dump.txt”,false))
val字节=字节数组(16)
var偏移量=0
变量i=0
而(i
下面是使用i.inc()(4000ms+)的代码
package com.beudoin
导入java.io.BufferedWriter
导入java.io.FileInputStream
导入java.io.FileWriter
导入java.nio.channels.FileChannel
趣味主线(args:Array){
val s=System.currentTimeMillis()
val channel=FileInputStream(“client.dll”).channel
val buffer=channel.map(FileChannel.MapMode.READ_ONLY,0,channel.size())
val数据=字节数组(buffer.capacity())
buffer.get(数据)
val writer=BufferedWriter(FileWriter(“dump.txt”,false))
val字节=字节数组(16)
var偏移量=0
/*变量i=0
而(i
有人能告诉我为什么i.inc()比i++慢得多吗
注意:将client.dll替换为任何文件(应为~12mb以获得准确的数字,或者在此处下载我的测试文件inc()
调用您的代码是完全冗余的:它不会更改变量:
var x = 0
x.inc()
println(x) // 0
至于运行时的差异,即使是两种实现的语义也是不同的:
- 第一段:
对于外部循环中的每个while (i < data.size) { for (j in bytes.indices) { bytes[j] = data[i++] } //... }
,都会调用内部循环,因此需要更长的时间i
var x = 0
x.inc()
println(x) // 0
while (i < data.size) {
for (j in bytes.indices) {
bytes[j] = data[i++]
}
//...
}
for (i in data.indices) {
for (j in bytes.indices) {
bytes[j] = data[i] // removed redundant i.inc()
}
//...
}