Optimize query performance and memory usage

This commit is contained in:
Marco Minerva
2024-08-02 14:56:19 +02:00
parent 1264b7f502
commit 17eee5f775
2 changed files with 6 additions and 3 deletions
+3
View File
@@ -20,6 +20,9 @@ var appSettings = builder.Services.ConfigureAndGet<AppSettings>(builder.Configur
builder.Services.AddSqlServer<ApplicationDbContext>(builder.Configuration.GetConnectionString("SqlConnection"), options => builder.Services.AddSqlServer<ApplicationDbContext>(builder.Configuration.GetConnectionString("SqlConnection"), options =>
{ {
options.UseVectorSearch(); options.UseVectorSearch();
}, options =>
{
options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
}); });
builder.Services.AddMemoryCache(); builder.Services.AddMemoryCache();
@@ -57,7 +57,7 @@ public class VectorSearchService(ApplicationDbContext dbContext, ITextEmbeddingG
public async Task<IEnumerable<Document>> GetDocumentsAsync() public async Task<IEnumerable<Document>> GetDocumentsAsync()
{ {
var documents = await dbContext.Documents.OrderBy(d => d.Name).AsNoTracking() var documents = await dbContext.Documents.OrderBy(d => d.Name)
.Select(d => new Document(d.Id, d.Name, d.CreationDate, d.Chunks.Count)) .Select(d => new Document(d.Id, d.Name, d.CreationDate, d.Chunks.Count))
.ToListAsync(); .ToListAsync();
@@ -66,7 +66,7 @@ public class VectorSearchService(ApplicationDbContext dbContext, ITextEmbeddingG
public async Task<IEnumerable<DocumentChunk>> GetDocumentChunksAsync(Guid documentId) public async Task<IEnumerable<DocumentChunk>> GetDocumentChunksAsync(Guid documentId)
{ {
var documentChunks = await dbContext.DocumentChunks.Where(c => c.DocumentId == documentId).OrderBy(c => c.Index).AsNoTracking() var documentChunks = await dbContext.DocumentChunks.Where(c => c.DocumentId == documentId).OrderBy(c => c.Index)
.Select(c => new DocumentChunk(c.Id, c.Index, c.Content, null)) .Select(c => new DocumentChunk(c.Id, c.Index, c.Content, null))
.ToListAsync(); .ToListAsync();
@@ -75,7 +75,7 @@ public class VectorSearchService(ApplicationDbContext dbContext, ITextEmbeddingG
public async Task<DocumentChunk?> GetDocumentChunkEmbeddingAsync(Guid documentId, Guid documentChunkId) public async Task<DocumentChunk?> GetDocumentChunkEmbeddingAsync(Guid documentId, Guid documentChunkId)
{ {
var documentChunk = await dbContext.DocumentChunks.Where(c => c.Id == documentChunkId && c.DocumentId == documentId).AsNoTracking() var documentChunk = await dbContext.DocumentChunks.Where(c => c.Id == documentChunkId && c.DocumentId == documentId)
.Select(c => new DocumentChunk(c.Id, c.Index, c.Content, c.Embedding)) .Select(c => new DocumentChunk(c.Id, c.Index, c.Content, c.Embedding))
.FirstOrDefaultAsync(); .FirstOrDefaultAsync();