Skip to content

Commit

Permalink
PR feedback and added more places where it tracks last activity
Browse files Browse the repository at this point in the history
  • Loading branch information
heejaechang committed Sep 14, 2017
1 parent 2f08552 commit d18adf6
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
24 changes: 23 additions & 1 deletion src/Workspaces/Remote/Core/Services/AssetStorage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,24 @@ internal class AssetStorage
public static readonly AssetStorage Default =
new AssetStorage(cleanupInterval: TimeSpan.FromMinutes(1), purgeAfter: TimeSpan.FromMinutes(3), gcAfter: TimeSpan.FromMinutes(5));

/// <summary>
/// Time interval we check storage for cleanup
/// </summary>
private readonly TimeSpan _cleanupIntervalTimeSpan;

/// <summary>
/// Time span data can sit inside of cache (<see cref="_assets"/>) without being used.
/// after that, it will be removed from the cache.
/// </summary>
private readonly TimeSpan _purgeAfterTimeSpan;

/// <summary>
/// Time we will wait after the last activity before doing explicit GC cleanup.
/// We monitor all resource access and service call to track last activity time.
///
/// We do this since 64bit process can hold onto quite big unused memory when
/// OOP is running as AnyCpu
/// </summary>
private readonly TimeSpan _gcAfterTimeSpan;

private readonly ConcurrentDictionary<Checksum, Entry> _globalAssets =
Expand All @@ -36,11 +52,17 @@ internal class AssetStorage

private volatile AssetSource _assetSource;

// constructor for testing
public AssetStorage()
{
// constructor for testing
}

/// <summary>
/// Create central data cache
/// </summary>
/// <param name="cleanupInterval">time interval to clean up</param>
/// <param name="purgeAfter">time unused data can sit in the cache</param>
/// <param name="gcAfter">time we wait before it call GC since last activity</param>
public AssetStorage(TimeSpan cleanupInterval, TimeSpan purgeAfter, TimeSpan gcAfter)
{
_cleanupIntervalTimeSpan = cleanupInterval;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ private static Task<Solution> GetSolutionAsync(RoslynServices roslynService, Pin

protected async Task<T> RunServiceAsync<T>(Func<Task<T>> callAsync, CancellationToken cancellationToken)
{
AssetStorage.UpdateLastActivityTime();

try
{
return await callAsync().ConfigureAwait(false);
Expand All @@ -185,6 +187,8 @@ protected async Task<T> RunServiceAsync<T>(Func<Task<T>> callAsync, Cancellation

protected async Task RunServiceAsync(Func<Task> callAsync, CancellationToken cancellationToken)
{
AssetStorage.UpdateLastActivityTime();

try
{
await callAsync().ConfigureAwait(false);
Expand All @@ -198,6 +202,8 @@ protected async Task RunServiceAsync(Func<Task> callAsync, CancellationToken can

protected T RunService<T>(Func<T> call, CancellationToken cancellationToken)
{
AssetStorage.UpdateLastActivityTime();

try
{
return call();
Expand All @@ -211,6 +217,8 @@ protected T RunService<T>(Func<T> call, CancellationToken cancellationToken)

protected void RunService(Action call, CancellationToken cancellationToken)
{
AssetStorage.UpdateLastActivityTime();

try
{
call();
Expand Down

0 comments on commit d18adf6

Please sign in to comment.