Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BPlusTree斜拉闩锁性能_C#_.net_Locking_B Plus Tree - Fatal编程技术网

C# BPlusTree斜拉闩锁性能

C# BPlusTree斜拉闩锁性能,c#,.net,locking,b-plus-tree,C#,.net,Locking,B Plus Tree,我正在开发一个内存版本的B+树,它使用了crabbing技术(在释放父级锁之前,必须先获得子级锁) 我的目标实现语言是C#在我的实现中,我有一个支持的字典,对于X S和U闩锁,我为字典中的每个可用节点使用不同的ReaderWriterLockSlim。所以获得SLatch基本上看起来像: internal void SLatch(long page) { nodes[page].locker.EnterReadLock(); } 当我运行多线程测试时,我在树行为中看到一个非常奇怪的模式

我正在开发一个内存版本的B+树,它使用了crabbing技术(在释放父级锁之前,必须先获得子级锁)

我的目标实现语言是C#在我的实现中,我有一个支持的
字典
,对于X S和U闩锁,我为字典中的每个可用节点使用不同的ReaderWriterLockSlim。所以获得SLatch基本上看起来像:

internal void SLatch(long page)
{
    nodes[page].locker.EnterReadLock();
}
当我运行多线程测试时,我在树行为中看到一个非常奇怪的模式。在测试中,我使用了16芯机器和10000长的机器。树键计数为16,因此有近 600000个DataNode对象和70000个IndexNode对象

当我在8个线程上运行测试时,同时在树中插入值。我看到,在第一个核心的使用率是线性上升,从1个核心到3个。但从一开始一段时间后,它平均恢复到1.5个内核,并且内核使用率变得恒定。在并行探查器中,我看到在峰值3之前,进程基本上都在休眠,彼此等待,但在峰值之后,它们开始等待对方被阻塞

有人能提出一些想法吗?我应该在哪里寻找问题,或者我使用的方法有哪些缺陷


谢谢。

如果没有白盒分析,我想没什么好做的——你的资料有吗?