嵌套锁定到相同的对象性能

Jal*_*aid 9 c# concurrency

对同一对象使用嵌套锁是否是一种性能成本.

说我们有:

    public void AddRange(IEnumeratable<Item> items)
    {
        lock (_syncObject)
        {
            foreach (Item item in items)
            {
                InsertItem(item);
            }
        }
    }

    public void InsertItem(Item item)
    {
        lock (_syncObject)
        {
            //..
        }
    }
Run Code Online (Sandbox Code Playgroud)

这样做"性能方面"可以吗?

提前致谢.

And*_*zub 7

锁有成本,我建议你实现这样的代码:

public void AddRange(IEnumeratable<Item> items)
{
    lock (_syncObject) // Locking only once.
    {
        foreach (Item item in items)
        {
            InsertItemImpl(item);
        }
    }
}

private void InsertItemImpl(Item item)
{
     // inserting the item
}

public void InsertItem(Item item)
{
    lock (_syncObject)
    {
        InsertItemImpl(item);
    }
}
Run Code Online (Sandbox Code Playgroud)