gpt4 book ai didi

c# - 什么是用于查找独特项目的良好 .NET 数据结构?

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:21 25 4
gpt4 key购买 nike

我有大量自定义对象,这些对象是我从系统中的查询中检索到的。假设这些对象都有 5 个不同的属性 - FirstName、LastName、Gender、ZipCode 和 Birthday。对于每个不同的属性,我希望能够获得所有唯一值及其计数的列表,并按降序对它们进行排序。它是一种多面导航系统。因此,如果我在初始查询中有 5000 个结果,那么我希望能够显示前 10 个名字,从最流行到最不流行,并在其旁边显示计数。然后与其他属性相同。

目前,我有一个例程,一次检查每个项目并检查不同的属性,并保留一堆包含信息的不同哈希表。它有效,但速度非常慢。我认为一次一个地检查每个项目不是很有效。我可以使用其他类型的 C# 结构来更轻松地获取此类信息吗?我知道 SQL Server 在这类事情上做得很好——但我认为这真的不可能。我从不同系统的 API 获取我的自定义对象列表。因此,我将不得不获取该对象列表并以某种方式将它们放入临时表中,这有点违背了我认为的目的。另外,我认为 SQL Server 临时表是连接特定的,我的应用程序会重复使用连接。

编辑:我试图避免的是必须遍历列表并处理每个单独的项目。我想知道是否有某种数据结构可以让我一次查询整个列表(如数据库)并获取信息。问题是我们的前端 Web 服务器受到重创,因为我们的服务器上有大量流量,人们正在访问这些多面导航页面,我正在寻找一种更有效的方法。

有什么想法吗?

谢谢,科里

最佳答案

很遗憾,我很确定您的问题的答案是“否”。如果您获取数据的唯一方式是未编制索引的 List ,则 某事将不得不逐一检查这些项目并进行分析它们用于 Top-N 或创建索引。即使您将它传递给另一个工具(临时数据库或第三方数据结构),您只是将处理放在其他地方,您的 CPU 也会同样多地运转。您在原始问题中概述的解决方案似乎是最合理的做法。

一些建议:

  • 这些 Top-N 列表对所有用户来说都是一样的吗?还是可以将它们分成不同数量的用例?您可以获得它们一次并将它们存储在网络缓存中。也许设置一个后台进程,每 M 分钟更新一次它们,使它们保持在一定程度上是最新的。
  • 这只是一个 UI 感知问题吗?您能否先计算并显示最重要的结果,然后在后台计算其他结果并异步传送到页面?
  • 请求 API 提供商提供更可靠的方法来获取结果?? :)
  • 投入更多硬件? :)

很抱歉没有回答,但我不认为这里有 Elixir 。

关于c# - 什么是用于查找独特项目的良好 .NET 数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2072957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com