refactor: 代码重构

This commit is contained in:
Argo Zhang 2025-11-21 17:05:13 +08:00
parent 426038b3fe
commit 85144e1c40
4 changed files with 14 additions and 14 deletions

View File

@ -2,7 +2,7 @@
<PropertyGroup>
<id>IP2Region.Net</id>
<version>3.0.0</version>
<version>2.1.1</version>
<title>IP2Region.Net</title>
<authors>Alan Lee</authors>
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>

View File

@ -15,10 +15,11 @@ internal abstract class AbstractCacheStrategy(string xdbPath)
protected const int VectorIndexSize = 8;
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; }
protected FileStream XdbFileStream = new(xdbPath, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize, FileOptions.RandomAccess);
public void ResetIoCount()
{
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> 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);
int totalBytesRead = 0;
try
{
_xdbFileStream.Seek(offset, SeekOrigin.Begin);
XdbFileStream.Seek(offset, SeekOrigin.Begin);
int bytesRead;
while (totalBytesRead < length)
{
int bytesToRead = Math.Min(BufferSize, length - totalBytesRead);
bytesRead = _xdbFileStream.Read(buffer, totalBytesRead, bytesToRead);
bytesRead = XdbFileStream.Read(buffer, totalBytesRead, length);
totalBytesRead += bytesRead;
IoCount++;

View File

@ -15,8 +15,10 @@ class ContentCacheStrategy : AbstractCacheStrategy
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);
}

View File

@ -18,7 +18,10 @@ class VectorIndexCacheStrategy : AbstractCacheStrategy
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);