优化IP库GC性能

This commit is contained in:
刘祥超
2023-12-24 09:24:37 +08:00
parent 1760e8b9c8
commit fc3c607c8d
2 changed files with 26 additions and 6 deletions

View File

@@ -20,8 +20,8 @@ type Reader struct {
regionMap map[string]*ipRegion // 缓存重复的区域用来节约内存 regionMap map[string]*ipRegion // 缓存重复的区域用来节约内存
ipV4Items []*ipv4Item ipV4Items []ipv4Item
ipV6Items []*ipv6Item ipV6Items []ipv6Item
lastIPFrom uint64 lastIPFrom uint64
lastCountryId uint16 lastCountryId uint16
@@ -162,11 +162,11 @@ func (this *Reader) Meta() *Meta {
return this.meta return this.meta
} }
func (this *Reader) IPv4Items() []*ipv4Item { func (this *Reader) IPv4Items() []ipv4Item {
return this.ipV4Items return this.ipV4Items
} }
func (this *Reader) IPv6Items() []*ipv6Item { func (this *Reader) IPv6Items() []ipv6Item {
return this.ipV6Items return this.ipV6Items
} }
@@ -296,13 +296,13 @@ func (this *Reader) parseLine(line []byte) error {
} }
if version == "4" { if version == "4" {
this.ipV4Items = append(this.ipV4Items, &ipv4Item{ this.ipV4Items = append(this.ipV4Items, ipv4Item{
IPFrom: uint32(ipFrom), IPFrom: uint32(ipFrom),
IPTo: uint32(ipTo), IPTo: uint32(ipTo),
Region: region, Region: region,
}) })
} else { } else {
this.ipV6Items = append(this.ipV6Items, &ipv6Item{ this.ipV6Items = append(this.ipV6Items, ipv6Item{
IPFrom: ipFrom, IPFrom: ipFrom,
IPTo: ipTo, IPTo: ipTo,
Region: region, Region: region,

View File

@@ -215,8 +215,12 @@ func (this *QueryResult) realCountryId() uint16 {
switch item := this.item.(type) { switch item := this.item.(type) {
case *ipv4Item: case *ipv4Item:
return item.Region.CountryId return item.Region.CountryId
case ipv4Item:
return item.Region.CountryId
case *ipv6Item: case *ipv6Item:
return item.Region.CountryId return item.Region.CountryId
case ipv6Item:
return item.Region.CountryId
} }
} }
@@ -228,8 +232,12 @@ func (this *QueryResult) realProvinceId() uint16 {
switch item := this.item.(type) { switch item := this.item.(type) {
case *ipv4Item: case *ipv4Item:
return item.Region.ProvinceId return item.Region.ProvinceId
case ipv4Item:
return item.Region.ProvinceId
case *ipv6Item: case *ipv6Item:
return item.Region.ProvinceId return item.Region.ProvinceId
case ipv6Item:
return item.Region.ProvinceId
} }
} }
@@ -241,8 +249,12 @@ func (this *QueryResult) realCityId() uint32 {
switch item := this.item.(type) { switch item := this.item.(type) {
case *ipv4Item: case *ipv4Item:
return item.Region.CityId return item.Region.CityId
case ipv4Item:
return item.Region.CityId
case *ipv6Item: case *ipv6Item:
return item.Region.CityId return item.Region.CityId
case ipv6Item:
return item.Region.CityId
} }
} }
@@ -254,8 +266,12 @@ func (this *QueryResult) realTownId() uint32 {
switch item := this.item.(type) { switch item := this.item.(type) {
case *ipv4Item: case *ipv4Item:
return item.Region.TownId return item.Region.TownId
case ipv4Item:
return item.Region.TownId
case *ipv6Item: case *ipv6Item:
return item.Region.TownId return item.Region.TownId
case ipv6Item:
return item.Region.TownId
} }
} }
@@ -267,8 +283,12 @@ func (this *QueryResult) realProviderId() uint16 {
switch item := this.item.(type) { switch item := this.item.(type) {
case *ipv4Item: case *ipv4Item:
return item.Region.ProviderId return item.Region.ProviderId
case ipv4Item:
return item.Region.ProviderId
case *ipv6Item: case *ipv6Item:
return item.Region.ProviderId return item.Region.ProviderId
case ipv6Item:
return item.Region.ProviderId
} }
} }