我在下面创建了一个示例程序。在该程序中,我希望两件事没有锁
。
using System.Collections.Generic;
using System.Linq;
namespace Second.App
{
class Program
{
static void Main(string[] args)
{
var sampleClass=new SampleClass();
sampleClass.AddString("Apple");
sampleClass.AddString("Orange");
string allStr = sampleClass.ToString();
}
}
public class SampleClass:SecondClass
{
public override void AddString(string text)
{
base.AddString(text);
}
public override string ToString()
{
return base.ToString();
}
}
public class SecondClass
{
private readonly List<string> _collection = new List<string>();
public virtual void AddString(string text)
{
_collection.Add(text);
}
public override string ToString()
{
const string delimiter = ",";
return _collection.Aggregate((i, j) => i + delimiter + j);
}
}
}
希望有一些好的答案。
您可以通过缓存折叠后的字符串来优化单个编写器和多个并发读取器的性能。并发的读者可能会得到一个过时的字符串,但是分配是原子的。但是,如果您有多个作者,则将需要同步。
public class SecondClass
{
private readonly List<string> _collection = new List<string>();
private string _lastFoldedString;
private const string delimiter = ",";
public virtual void AddString(string text)
{
// You'll need some synchronization type if more than one concurrent writer
// lock(_collection)
{
_collection.Add(text);
// Or Use String.Join, or just have a running appender
_lastFoldedString = _collection.Aggregate((i, j) => i + delimiter + j);
}
}
public override string ToString()
{
return _lastFoldedString;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句