提交 36cbe2cb 编写于 作者: H Heejae Chang 提交者: GitHub

Merge pull request #14044 from heejaechang/reduceallocation1

removed allocation caused by concurrent dictionary
......@@ -140,10 +140,11 @@ public SubTreeNode(ChecksumTreeCollection owner, Serializer serializer)
public virtual ChecksumObject TryGetChecksumObject(Checksum checksum, CancellationToken cancellationToken)
{
ChecksumObject checksumObject;
foreach (var entry in _cache.Values)
foreach (var kv in _cache)
{
cancellationToken.ThrowIfCancellationRequested();
var entry = kv.Value;
if (entry.TryGetValue(checksum, out checksumObject))
{
// this cache has information for the checksum
......@@ -177,8 +178,9 @@ public virtual void AppendChecksumObjects(Dictionary<Checksum, ChecksumObject> m
return;
}
foreach (var entry in _cache.Values)
foreach (var kv in _cache)
{
var entry = kv.Value;
AppendChecksumObjects(map, searchingChecksumsLeft, entry, cancellationToken);
if (searchingChecksumsLeft.Count == 0)
{
......@@ -215,8 +217,9 @@ public ChecksumObjectCache TryGetChecksumObjectEntry(object key, string kind, Ca
return self;
}
foreach (var entry in _cache.Values)
foreach (var kv in _cache)
{
var entry = kv.Value;
var tree = entry.TryGetSubTreeNode();
if (tree == null)
{
......
......@@ -74,8 +74,9 @@ public IRootChecksumTreeNode CreateRootTreeNode(SolutionState solutionState)
public ChecksumObject GetChecksumObject(Checksum checksum, CancellationToken cancellationToken)
{
// search snapshots we have
foreach (var cache in _rootTreeNodes.Values)
foreach (var kv in _rootTreeNodes)
{
var cache = kv.Value;
var checksumObject = cache.TryGetChecksumObject(checksum, cancellationToken);
if (checksumObject != null)
{
......@@ -84,10 +85,11 @@ public ChecksumObject GetChecksumObject(Checksum checksum, CancellationToken can
}
// search global assets
foreach (var asset in _globalAssets.Values)
foreach (var kv in _globalAssets)
{
cancellationToken.ThrowIfCancellationRequested();
var asset = kv.Value;
if (asset.Checksum == checksum)
{
return asset;
......@@ -106,8 +108,9 @@ public ChecksumObject GetChecksumObject(Checksum checksum, CancellationToken can
var result = new Dictionary<Checksum, ChecksumObject>();
// search checksum trees we have
foreach (var cache in _rootTreeNodes.Values)
foreach (var kv in _rootTreeNodes)
{
var cache = kv.Value;
cache.AppendChecksumObjects(result, searchingChecksumsLeft.Object, cancellationToken);
if (result.Count == numberOfChecksumsToSearch)
{
......@@ -118,10 +121,11 @@ public ChecksumObject GetChecksumObject(Checksum checksum, CancellationToken can
}
// search global assets
foreach (var asset in _globalAssets.Values)
foreach (var kv in _globalAssets)
{
cancellationToken.ThrowIfCancellationRequested();
var asset = kv.Value;
if (searchingChecksumsLeft.Object.Remove(asset.Checksum))
{
result[asset.Checksum] = asset;
......@@ -142,8 +146,9 @@ public ChecksumObject GetChecksumObject(Checksum checksum, CancellationToken can
private ChecksumObjectCache TryGetChecksumObjectEntry(object key, string kind, CancellationToken cancellationToken)
{
foreach (var cache in _rootTreeNodes.Values)
foreach (var kv in _rootTreeNodes)
{
var cache = kv.Value;
var entry = cache.TryGetChecksumObjectEntry(key, kind, cancellationToken);
if (entry != null)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册