Kotlin i.inc()比i慢10倍+;?

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

所以今天我了解了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 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()
    }
    //...
}