Skip to content

Commit d0dbc28

Browse files
Improve performances on large number of files (#80)
1 parent 3f5386e commit d0dbc28

61 files changed

Lines changed: 847 additions & 795 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/ByteSync.Client/Business/Synchronizations/MultiUploadZip.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ public MultiUploadZip(string key, SharedFileDefinition sharedFileDefinition)
1212
Key = key;
1313

1414
SharedFileDefinition = sharedFileDefinition;
15-
// ZipPath = zipPath;
1615

1716
SharedFileDefinition.IsMultiFileZip = true;
1817
CreationDate = DateTime.Now;
@@ -21,8 +20,6 @@ public MultiUploadZip(string key, SharedFileDefinition sharedFileDefinition)
2120
MemoryStream = new MemoryStream();
2221

2322
ZipArchive = new ZipArchive(MemoryStream, ZipArchiveMode.Create, true);
24-
25-
// ZipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update);
2623

2724
ActionGroupsIds = new List<string>();
2825

@@ -35,8 +32,6 @@ public MultiUploadZip(string key, SharedFileDefinition sharedFileDefinition)
3532

3633
public SharedFileDefinition SharedFileDefinition { get; }
3734

38-
// public string ZipPath { get; }
39-
4035
public MemoryStream MemoryStream { get; }
4136

4237
public ZipArchive ZipArchive { get; }
@@ -54,7 +49,7 @@ public MultiUploadZip(string key, SharedFileDefinition sharedFileDefinition)
5449
public bool CanAdd(FileInfo fileInfo, string actionsGroupId)
5550
{
5651
return
57-
ActionGroupsIds.Count < 1500 &&
52+
ActionGroupsIds.Count < 100 &&
5853
ActionsGroupIdsConcatenationLength + actionsGroupId.Length + 5 < 25000 &&
5954
Size + fileInfo.Length < 8 * SizeConstants.ONE_MEGA_BYTES;
6055
}

src/ByteSync.Client/DependencyInjection/Modules/GenericTypesModule.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ public class GenericTypesModule : Module
1212
protected override void Load(ContainerBuilder builder)
1313
{
1414
builder.RegisterGeneric(typeof(SessionInvalidationCachePolicy<,>))
15-
.As(typeof(ISessionInvalidationSourceCachePolicy<,>))
15+
.As(typeof(ISessionInvalidationCachePolicy<,>))
16+
.InstancePerDependency();
17+
18+
builder.RegisterGeneric(typeof(PropertyIndexer<,>))
19+
.As(typeof(IPropertyIndexer<,>))
1620
.InstancePerDependency();
1721

1822
builder.RegisterType<ConfigurationReader<ApplicationSettings>>().As<IConfigurationReader<ApplicationSettings>>();

src/ByteSync.Client/Interfaces/Controls/Communications/Http/ISynchronizationApiClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace ByteSync.Interfaces.Controls.Communications.Http;
77

88
public interface ISynchronizationApiClient
99
{
10-
public Task<Synchronization> StartSynchronization(SynchronizationStartRequest synchronizationStartRequest);
10+
public Task StartSynchronization(SynchronizationStartRequest synchronizationStartRequest);
1111

1212
public Task AssertLocalCopyIsDone(string sessionId, List<string> actionsGroupIds);
1313

src/ByteSync.Client/Interfaces/Controls/Synchronizations/ISynchronizationLooper.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
namespace ByteSync.Interfaces.Controls.Synchronizations;
44

5-
public interface ISynchronizationLooper
5+
public interface ISynchronizationLooper : IAsyncDisposable
66
{
7-
// Task InitializeData();
8-
97
Task CloudSessionSynchronizationLoop();
108
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using DynamicData;
2+
3+
namespace ByteSync.Interfaces.Repositories;
4+
5+
public interface IPropertyIndexer<TObject, in TIndex>
6+
where TObject : notnull
7+
where TIndex : notnull
8+
{
9+
void Initialize(SourceCache<TObject, string> sourceCache, Func<TObject, TIndex> indexSelector);
10+
11+
List<TObject> GetByIndex(TIndex index);
12+
}

src/ByteSync.Client/Interfaces/Repositories/ISessionInvalidationSourceCachePolicy.cs renamed to src/ByteSync.Client/Interfaces/Repositories/ISessionInvalidationCachePolicy.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
namespace ByteSync.Interfaces.Repositories;
44

5-
public interface ISessionInvalidationSourceCachePolicy<TObject, TKey> : IDisposable where TKey : notnull
5+
public interface ISessionInvalidationCachePolicy<TObject, TKey> : IDisposable
6+
where TKey : notnull
7+
where TObject : notnull
68
{
79
void Initialize(SourceCache<TObject, TKey> sourceCache, bool b, bool b1);
810
}

src/ByteSync.Client/Repositories/AtomicActionRepository.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,23 @@ namespace ByteSync.Repositories;
66

77
public class AtomicActionRepository : BaseSourceCacheRepository<AtomicAction, string>, IAtomicActionRepository
88
{
9-
private readonly ISessionInvalidationSourceCachePolicy<AtomicAction, string> _sessionInvalidationSourceCachePolicy;
9+
private readonly ISessionInvalidationCachePolicy<AtomicAction, string> _sessionInvalidationCachePolicy;
10+
private readonly IPropertyIndexer<AtomicAction, ComparisonItem> _propertyIndexer;
1011

11-
public AtomicActionRepository(ISessionInvalidationSourceCachePolicy<AtomicAction, string> sessionInvalidationSourceCachePolicy)
12+
public AtomicActionRepository(ISessionInvalidationCachePolicy<AtomicAction, string> sessionInvalidationCachePolicy,
13+
IPropertyIndexer<AtomicAction, ComparisonItem> propertyIndexer)
1214
{
13-
_sessionInvalidationSourceCachePolicy = sessionInvalidationSourceCachePolicy;
14-
_sessionInvalidationSourceCachePolicy.Initialize(SourceCache, true, true);
15+
_sessionInvalidationCachePolicy = sessionInvalidationCachePolicy;
16+
_sessionInvalidationCachePolicy.Initialize(SourceCache, true, true);
17+
18+
_propertyIndexer = propertyIndexer;
19+
_propertyIndexer.Initialize(SourceCache, atomicAction => atomicAction.ComparisonItem!);
1520
}
16-
21+
1722
protected override string KeySelector(AtomicAction atomicAction) => atomicAction.AtomicActionId;
1823

1924
public List<AtomicAction> GetAtomicActions(ComparisonItem comparisonItem)
2025
{
21-
var result = SourceCache.Items
22-
.Where(atomicAction => Equals(atomicAction.ComparisonItem, comparisonItem))
23-
.ToList();
24-
25-
return result;
26+
return _propertyIndexer.GetByIndex(comparisonItem);
2627
}
27-
}
28+
}

src/ByteSync.Client/Repositories/BaseSourceCacheRepository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
namespace ByteSync.Repositories;
55

66
public abstract class BaseSourceCacheRepository<TObject, TKey> : IBaseSourceCacheRepository<TObject, TKey>
7-
where TKey : notnull
7+
where TKey : notnull where TObject : notnull
88
{
99
protected BaseSourceCacheRepository()
1010
{

src/ByteSync.Client/Repositories/InventoryFileRepository.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ namespace ByteSync.Repositories;
66

77
public class InventoryFileRepository : BaseSourceCacheRepository<InventoryFile, string>, IInventoryFileRepository
88
{
9-
private readonly ISessionInvalidationSourceCachePolicy<InventoryFile, string> _sessionInvalidationSourceCachePolicy;
9+
private readonly ISessionInvalidationCachePolicy<InventoryFile, string> _sessionInvalidationCachePolicy;
1010

11-
public InventoryFileRepository(ISessionInvalidationSourceCachePolicy<InventoryFile, string> sessionInvalidationSourceCachePolicy)
11+
public InventoryFileRepository(ISessionInvalidationCachePolicy<InventoryFile, string> sessionInvalidationCachePolicy)
1212
{
13-
_sessionInvalidationSourceCachePolicy = sessionInvalidationSourceCachePolicy;
14-
_sessionInvalidationSourceCachePolicy.Initialize(SourceCache, true, true);
13+
_sessionInvalidationCachePolicy = sessionInvalidationCachePolicy;
14+
_sessionInvalidationCachePolicy.Initialize(SourceCache, true, true);
1515
}
1616

1717
protected override string KeySelector(InventoryFile inventoryFile) => inventoryFile.FullName;

src/ByteSync.Client/Repositories/PathItemRepository.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@ namespace ByteSync.Repositories;
77

88
public class PathItemRepository : BaseSourceCacheRepository<PathItem, string>, IPathItemRepository
99
{
10-
private readonly ISessionInvalidationSourceCachePolicy<PathItem, string> _sessionInvalidationSourceCachePolicy;
10+
private readonly ISessionInvalidationCachePolicy<PathItem, string> _sessionInvalidationCachePolicy;
1111

12-
public PathItemRepository(IEnvironmentService environmentService, ISessionInvalidationSourceCachePolicy<PathItem, string> sessionInvalidationSourceCachePolicy)
12+
public PathItemRepository(IEnvironmentService environmentService, ISessionInvalidationCachePolicy<PathItem, string> sessionInvalidationCachePolicy)
1313
{
1414
CurrentMemberPathItems = SourceCache
1515
.Connect()
1616
.Filter(pathItem => Equals(pathItem.ClientInstanceId, environmentService.ClientInstanceId!))
1717
.AsObservableCache();
1818

19-
_sessionInvalidationSourceCachePolicy = sessionInvalidationSourceCachePolicy;
20-
_sessionInvalidationSourceCachePolicy.Initialize(SourceCache, true, false);
19+
_sessionInvalidationCachePolicy = sessionInvalidationCachePolicy;
20+
_sessionInvalidationCachePolicy.Initialize(SourceCache, true, false);
2121
}
2222

2323
protected override string KeySelector(PathItem pathItem) => pathItem.Key;

0 commit comments

Comments
 (0)