我的成像库中有以下代码,它利用处理器列表动态操作由HttpModule
.
目前,每个处理器只创建一个实例以降低内存开销,并且每个处理器都具有可写属性,有助于确定处理每个匹配的查询字符串参数并存储要处理的解析值的顺序。
如您所见,我目前正在将方法功能包装在一个lock
语句中,以防止不同的线程HttpModule
覆盖处理器属性,尽管我知道这可能会成为瓶颈。我想知道的是:是否有一种设计模式或方法可以使我的处理器在没有锁的情况下成为线程安全的?
public static ImageFactory AutoProcess(this ImageFactory factory)
{
if (factory.ShouldProcess)
{
// TODO: This is going to be a bottleneck for speed. Find a faster way.
lock (SyncLock)
{
// Get a list of all graphics processors that
// have parsed and matched the querystring.
List<IGraphicsProcessor> list =
ImageProcessorConfig.Instance.GraphicsProcessors
.Where(x => x.MatchRegexIndex(factory.QueryString) != int.MaxValue)
.OrderBy(y => y.SortOrder)
.ToList();
// Loop through and process the image.
foreach (IGraphicsProcessor graphicsProcessor in list)
{
factory.Image = graphicsProcessor.ProcessImage(factory);
}
}
}
return factory;
}