refactor: 代码重构
This commit is contained in:
parent
426038b3fe
commit
85144e1c40
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<id>IP2Region.Net</id>
|
<id>IP2Region.Net</id>
|
||||||
<version>3.0.0</version>
|
<version>2.1.1</version>
|
||||||
<title>IP2Region.Net</title>
|
<title>IP2Region.Net</title>
|
||||||
<authors>Alan Lee</authors>
|
<authors>Alan Lee</authors>
|
||||||
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
|
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,11 @@ internal abstract class AbstractCacheStrategy(string xdbPath)
|
||||||
protected const int VectorIndexSize = 8;
|
protected const int VectorIndexSize = 8;
|
||||||
|
|
||||||
private const int BufferSize = 64 * 1024;
|
private const int BufferSize = 64 * 1024;
|
||||||
private readonly FileStream _xdbFileStream = new(xdbPath, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize, FileOptions.RandomAccess);
|
|
||||||
|
|
||||||
public int IoCount { get; private set; }
|
public int IoCount { get; private set; }
|
||||||
|
|
||||||
|
protected FileStream XdbFileStream = new(xdbPath, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize, FileOptions.RandomAccess);
|
||||||
|
|
||||||
public void ResetIoCount()
|
public void ResetIoCount()
|
||||||
{
|
{
|
||||||
IoCount = 0;
|
IoCount = 0;
|
||||||
|
|
@ -26,24 +27,18 @@ internal abstract class AbstractCacheStrategy(string xdbPath)
|
||||||
|
|
||||||
public virtual ReadOnlyMemory<byte> GetVectorIndex(int offset) => GetData(HeaderInfoLength + offset, VectorIndexSize);
|
public virtual ReadOnlyMemory<byte> GetVectorIndex(int offset) => GetData(HeaderInfoLength + offset, VectorIndexSize);
|
||||||
|
|
||||||
public virtual ReadOnlyMemory<byte> GetData(int offset = 0, int length = 0)
|
public virtual ReadOnlyMemory<byte> GetData(long offset, int length)
|
||||||
{
|
{
|
||||||
if (length == 0)
|
|
||||||
{
|
|
||||||
length = (int)_xdbFileStream.Length;
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(length);
|
byte[] buffer = ArrayPool<byte>.Shared.Rent(length);
|
||||||
int totalBytesRead = 0;
|
int totalBytesRead = 0;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_xdbFileStream.Seek(offset, SeekOrigin.Begin);
|
XdbFileStream.Seek(offset, SeekOrigin.Begin);
|
||||||
|
|
||||||
int bytesRead;
|
int bytesRead;
|
||||||
while (totalBytesRead < length)
|
while (totalBytesRead < length)
|
||||||
{
|
{
|
||||||
int bytesToRead = Math.Min(BufferSize, length - totalBytesRead);
|
bytesRead = XdbFileStream.Read(buffer, totalBytesRead, length);
|
||||||
bytesRead = _xdbFileStream.Read(buffer, totalBytesRead, bytesToRead);
|
|
||||||
totalBytesRead += bytesRead;
|
totalBytesRead += bytesRead;
|
||||||
|
|
||||||
IoCount++;
|
IoCount++;
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,10 @@ class ContentCacheStrategy : AbstractCacheStrategy
|
||||||
|
|
||||||
public ContentCacheStrategy(string xdbPath) : base(xdbPath)
|
public ContentCacheStrategy(string xdbPath) : base(xdbPath)
|
||||||
{
|
{
|
||||||
_cacheData = base.GetData();
|
_cacheData = base.GetData(0, (int)XdbFileStream.Length);
|
||||||
|
XdbFileStream.Close();
|
||||||
|
XdbFileStream.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ReadOnlyMemory<byte> GetData(int offset = 0, int length = 0) => _cacheData.Slice(offset, length);
|
public override ReadOnlyMemory<byte> GetData(long offset = 0, int length = 0) => _cacheData.Slice((int)offset, length);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,10 @@ class VectorIndexCacheStrategy : AbstractCacheStrategy
|
||||||
|
|
||||||
public VectorIndexCacheStrategy(string xdbPath) : base(xdbPath)
|
public VectorIndexCacheStrategy(string xdbPath) : base(xdbPath)
|
||||||
{
|
{
|
||||||
_vectorCache = GetData(HeaderInfoLength, VectorIndexRows * VectorIndexCols * VectorIndexSize);
|
XdbFileStream.Seek(HeaderInfoLength, SeekOrigin.Begin);
|
||||||
|
var buffer = new byte[VectorIndexRows * VectorIndexCols * VectorIndexSize];
|
||||||
|
var length = XdbFileStream.Read(buffer, 0, buffer.Length);
|
||||||
|
_vectorCache = new ReadOnlyMemory<byte>(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ReadOnlyMemory<byte> GetVectorIndex(int offset) => _vectorCache.Slice(offset, VectorIndexSize);
|
public override ReadOnlyMemory<byte> GetVectorIndex(int offset) => _vectorCache.Slice(offset, VectorIndexSize);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue