我反复测试了,优化后测试结果基本上比优化前还慢?什么原因呢?

来源:9-3 使用pprof进行性能调优

弱弱小乖乖

2018-03-25

基本测试都是优化后比优化前还慢,偶尔优化后会快。为什么呢?

附图

https://chrome.google.com/webstore/

http://img.mukewang.com/szimg/5ab725070001e95919200984.jpg

http://img.mukewang.com/szimg/5ab7250700017fbf19200984.jpg


写回答

3回答

KimZing

2018-03-26

优化前

//img.mukewang.com/szimg/5ab893dc0001befb09920643.jpg


优化后

//img.mukewang.com/szimg/5ab893f700011ebd08410639.jpg


用的是你的同样的代码,性能是有提升的,我的:go version: 1.10   电脑配置:i7 2.2GHZ 内存: 16G,

代码应该是没问题的,希望对你有所帮助。

0
4
弱弱小乖乖
回复
KimZing
那你这个是正常了
2018-03-26
共4条回复

弱弱小乖乖

提问者

2018-03-26

func BenchmarkSubstr(b *testing.B) {
   s := "黑化肥挥发发挥灰化肥挥发发黑会飞话"
   maxLength := 8
   for i := 0; i < 11; i++ {
      s = s + s
   }
   //b.Logf("len(s) = %d", len(s))

   b.ResetTimer()
   // b.N = 4000000
   for i := 0; i < b.N; i++ {
      actual := nonRepeatingStr(s)
      if actual != maxLength {
         b.Errorf("got %d for input %s; expected %d", actual, s, maxLength)
      }
   }

}


package main

import (
   "fmt"
)

var lastOccurred = make([]int, 0xffff) // 空间换时间 65535; lastOccurred[0x65]
func nonRepeatingStr(s string) int {
   // 每个字母最后出现的位置
   //lastOccurred := make(map[rune]int)

   for i := range lastOccurred {
      lastOccurred[i] = -1
   }

   // 子字符串开始的位置
   start := 0

   // 子字符串的长度
   maxLength := 0
   for i, ch := range []rune(s) {
      // 当前字符,从开始位置,如果出现过;开始位置从当前字符出现过的位置+1
      //if lastI, ok := lastOccurred[ch]; ok && lastI >= start {
      if lastI := lastOccurred[ch]; lastI != -1 && lastI >= start {
         start = lastOccurred[ch] + 1
      }

      if i-start+1 > maxLength {
         maxLength = i - start + 1
      }
      lastOccurred[ch] = i
   }
   return maxLength
}


0
0

KimZing

2018-03-26

你只贴了这个图,老师应该也没有办法回答你。作为程序员,还是学学如何提问的艺术吧
0
4
KimZing
回复
弱弱小乖乖
我用我电脑帮你一块试试
2018-03-26
共4条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程