gpt4 book ai didi

c# - 大型静态数组正在减慢类加载速度,需要更好/更快的查找方法

转载 作者:太空狗 更新时间:2023-10-29 23:59:28 26 4
gpt4 key购买 nike

我有一个包含几个静态数组的类:

具有 17,720 个元素的 int[]
一个包含 17,720 个元素的字符串[]

我注意到,当我第一次访问此类时,初始化需要将近 2 秒的时间,这会导致访问它的 GUI 暂停。

具体来说,它是对 Unicode 字符名称的查找。第一个数组是第二个数组的索引。

static readonly int[] NAME_INDEX = {<br/>
0x0000, 0x0001, 0x0005, 0x002C, 0x003B, ...

static readonly string[] NAMES = {<br/>
"Exclamation Mark", "Digit Three", "Semicolon", "Question Mark", ...

以下代码是如何使用数组的(给定字符代码)。 [注意:这段代码不是性能问题]

int nameIndex = Array.BinarySearch<int>(NAME_INDEX, code);<br/>
if (nameIndex > 0)
{
return NAMES[nameIndex];
}

我想我正在寻找有关如何构造数据的其他选项,以便 1) 快速加载类,以及 2) 我可以快速获取给定字符代码的“名称”。

我不应该将所有这些数千个元素存储在静态数组中吗?

更新
感谢所有的建议。我已经测试了字典方法,添加所有条目的性能似乎真的很差。

这是一些带有 Unicode 数据的代码,用于测试数组与字典 http://drop.io/fontspace/asset/fontspace-unicodesupport-zip

解决方案更新
我用后台线程测试了我原来的双数组(比两个字典选项都快)进行初始化,这对性能有所帮助。

然而,真正令人惊讶的是资源流中的二进制文件的工作方式。这是本线程中讨论的最快的解决方案。谢谢大家的回答!

最佳答案

所以一些观察。二进制搜索只有在您的数组已排序时才会起作用,而从上面的代码片段来看,它看起来没有排序。

由于您的主要目标是查找特定名称,因此您的代码需要哈希表。我会建议使用字典,它会给你 O(1)(平均)查找,而不是仅仅拥有数组的开销。

至于加载时间,我同意 Andrey 的观点,即最好的方法是使用单独的线程。使用您正在使用的数据量时,您将有一些初始化开销。 GUI 的常规做法是为这些事件使用单独的线程,这样您就不会锁定 UI。

关于c# - 大型静态数组正在减慢类加载速度,需要更好/更快的查找方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2767823/

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