mirror of
https://github.com/TeaOSLab/EdgeCommon.git
synced 2025-11-04 05:00:24 +08:00
优化IP库GC性能
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user