performance improvements for queries

This commit is contained in:
Stanley Dimant
2022-07-11 02:54:03 +02:00
parent b9ac535836
commit 0e0a75a71b
3 changed files with 17 additions and 16 deletions

View File

@@ -141,7 +141,7 @@ namespace MareSynchronosServer.Hubs
{
fileListHashes = fileListHashes.Where(f => !string.IsNullOrEmpty(f)).Distinct().ToList();
Logger.LogInformation("User " + AuthenticatedUserId + " sending files");
var forbiddenFiles = DbContext.ForbiddenUploadEntries.AsNoTracking().Where(f => fileListHashes.Contains(f.Hash));
var forbiddenFiles = await DbContext.ForbiddenUploadEntries.AsNoTracking().Where(f => fileListHashes.Contains(f.Hash)).ToListAsync();
var filesToUpload = new List<UploadFileDto>();
filesToUpload.AddRange(forbiddenFiles.Select(f => new UploadFileDto()
{
@@ -150,7 +150,7 @@ namespace MareSynchronosServer.Hubs
IsForbidden = true
}));
fileListHashes.RemoveAll(f => filesToUpload.Any(u => u.Hash == f));
var existingFiles = DbContext.Files.Where(f => fileListHashes.Contains(f.Hash));
var existingFiles = await DbContext.Files.AsNoTracking().Where(f => fileListHashes.Contains(f.Hash)).ToListAsync();
foreach (var file in fileListHashes.Where(f => existingFiles.All(e => e.Hash != f) && filesToUpload.All(u => u.Hash != f)))
{
Logger.LogInformation("User " + AuthenticatedUserId + " needs upload: " + file);

View File

@@ -134,21 +134,22 @@ namespace MareSynchronosServer.Hubs
{
Logger.LogInformation("User " + AuthenticatedUserId + " pushing character data to " + visibleCharacterIds.Count + " visible clients");
var uid = AuthenticatedUserId;
var entriesHavingThisUser = DbContext.ClientPairs.AsNoTracking()
var user = GetAuthenticatedUserUntracked();
var senderPairedUsers = DbContext.ClientPairs.AsNoTracking()
.Include(w => w.User)
.Include(w => w.OtherUser)
.Where(w => w.OtherUser.UID == uid && !w.IsPaused
&& visibleCharacterIds.Contains(w.User.CharacterIdentification)).ToList();
.Where(w => w.User.UID == user.UID && !w.IsPaused
&& visibleCharacterIds.Contains(w.OtherUser.CharacterIdentification))
.Select(u => u.OtherUser).ToList();
foreach (var pair in entriesHavingThisUser)
foreach (var pairedUser in senderPairedUsers)
{
var ownEntry = DbContext.ClientPairs.AsNoTracking()
.SingleOrDefault(w =>
w.User.UID == uid && w.OtherUser.UID == pair.User.UID);
if (ownEntry == null || ownEntry.IsPaused) continue;
await Clients.User(pair.User.UID).SendAsync(UserHubAPI.OnReceiveCharacterData, characterCache,
pair.OtherUser.CharacterIdentification);
var isPaused = DbContext.ClientPairs.AsNoTracking()
.FirstOrDefault(w =>
w.User.UID == pairedUser.UID && w.OtherUser.UID == user.UID)?.IsPaused ?? true;
if (isPaused) continue;
await Clients.User(pairedUser.UID).SendAsync(UserHubAPI.OnReceiveCharacterData, characterCache,
user.CharacterIdentification);
}
}