Просмотр исходного кода

SVI Корректировка расчёта степени сжатия

SVI 2 лет назад
Родитель
Сommit
f8824d998c
1 измененных файлов с 21 добавлено и 1 удалено
  1. 21 1
      internal/packer/packer.go

+ 21 - 1
internal/packer/packer.go

@@ -99,7 +99,27 @@ func (sf *Packer) round() bool {
 		timeEnd := time.Now().Local().UnixMilli()
 		timeDelta := float32(timeEnd-timeBeg) / 1000
 		sf.timeTotal += timeDelta
-		ratio := (float32(len(sf.binData)) - float32(sf.originSize)) / float32(sf.originSize) * 100
+		binOrigin := sf.originSize * 8
+		multFactor := 8
+		lenDict := sf.dictKeys.Len()
+		switch {
+		case lenDict < 256:
+			multFactor = 8
+		case 256 <= lenDict && lenDict < 512:
+			multFactor = 9
+		case 512 <= lenDict && lenDict < 1024:
+			multFactor = 10
+		case 1024 <= lenDict && lenDict < 2048:
+			multFactor = 11
+		case 2048 <= lenDict && lenDict < 4096:
+			multFactor = 12
+		case 4096 <= lenDict && lenDict < 8200:
+			multFactor = 13
+		default:
+			multFactor = 14
+		}
+		binPack := len(sf.binData) * multFactor
+		ratio := (float32(binPack) - float32(binOrigin)) / float32(binOrigin) * 100
 		log.Printf("Packer.Round(): timeTotal=%0.2fsec, timeRound=%0.2fsec, ration=%0.2f%%, totalChange=%v\n\n",
 			sf.timeTotal,
 			timeDelta,