好的,所以我正忙于为此工作编写API。现在数据库很大。客户端遇到许多性能问题。可以一次从一个客户处获取1-4百万记录(来自数据库)的任何位置。 C#使用IEnumarable列表(.toList())在检索时存储数据。但是,这样做的问题是基础数据结构是一个数组。因此,O(n)用于主要运算。当处理大量数据时,这非常慢,并且会占用大量内存和处理能力。
我正在考虑用来帮助解决此问题的一种方法是使用红黑树而不是列表。当我需要快速插入和移除时,RB树(平衡)可确保O(logn)性能。
用于RB-Tree的代码已完成且已删除,无需进一步修改。 (在那里一切正常)。但是我可以使用此数据结构代替列表吗?为此,我需要知道GET方法中返回的内容。 (数据在列表中看起来如何)。
我正在处理的数据库中的表名称是AspNetUser。 Id(主键)的类型为nvarchar(128)
RB树结构: RedBlackTreeNode.cs(定义节点) RedBlackTree.cs(定义主要操作)
使用泛型存储如下:RedBlackTree(TKey,TValue)
重要说明:使用ADO.NET实体数据模型
我目前拥有的东西:
//GET api/AspNetUsers
public IEnumerable<AspNetUser> Get()
{
using (APEntities entities = new APEntities ()) {
return entities.AspNetUsers.ToList(); //Is this returning the whole list with each record in the table as an entry?
}
}
我将如何执行RB-Tree?这样吗?:
RedBlackTree<String, AspNetUser> RBT;
//GET api/AspNetUsers
public RedBlackTree<String, AspNetUser> Get()
{
// How to iterate through each record and add to the tree structure?
}
在RedBlackTree.cs
public sealed class RedBlackTree<TKey, TValue>
{
public void Add(TKey key, TValue value){...}
.
.
.
}
如何将AspNetUsers中的每个记录另存为“ TValue”,而AspNetUsers中的ID如何另存为“ TKey”-对于RedBlackTree(TKey,TValue)。