gpt4 book ai didi

c# - 在 C# 中使用大型静态数组(Windows Phone 7 上的 Silverlight)

转载 作者:可可西里 更新时间:2023-11-01 12:41:36 27 4
gpt4 key购买 nike

我有一个如此简单的问题,我不敢相信我自己无法回答。但是,好了。

我有一个大型静态列表(城市、纬度和经度),我想在我的 Windows Phone 7 Silverlight 应用程序中使用。其中大约有 10,000 个。我想将这些数据静态嵌入到我的应用程序中并在数组中访问它(我需要非常定期地在代码中循环遍历整个列表)。

我最有效的存储方式是什么?我有点老派,所以我认为最快的方法是:

public struct City
{
public string name;
public double lat;
public double lon;
};

然后……

private City[] cc = new City[10000];

public CityDists()
{
cc[2].name = "Lae, Papua New Guinea"; cc[2].lat = 123; cc[2].lon = 123;
cc[3].name = "Rabaul, Papua New Guinea"; cc[3].lat = 123; cc[3].lon = 123;
cc[4].name = "Angmagssalik, Greenland"; cc[4].lat = 123; cc[4].lon = 123;
cc[5].name = "Angissoq, Greenland"; cc[5].lat = 123; cc[5].lon = 123;
...

但是,在代码实际运行之前,这会出现“内存不足”错误(我假设代码本身最终加载到内存中太多了)。

我在网上阅读的所有内容都告诉我使用 XML 资源或文件,然后将其反序列化为类的实例。但这真的能像使用结构一样快吗? XML 不会花费很长时间来解析吗?

我认为我有能力在这里编写代码 - 我只是不确定最好的方法是什么。我最感兴趣的是加载速度和(更重要的)运行时访问。

非常感谢任何帮助 - 第一个问题在这里,所以我希望我没有做任何愚蠢的事情。

克里斯

最佳答案

10,000 个结构不应耗尽内存,但只是为了确保,我会首先尝试将您的结构变成一个类,以便它使用堆而不是堆栈。这样做很有可能会解决您的内存不足错误。

如果您的数据每隔一段时间就会更新一次,那么存储在独立存储中的 XML 文件可能是一个不错的选择。您可以从 Web 服务中提取城市,并在它们更新时将这些类序列化到独立存储中的应用程序商店。

此外,我在代码示例中注意到 cc 数组未声明为静态。如果您有几个 CityDists 实例,那么这也可能会占用内存,因为每次创建新的 CityDists 类时都会重新创建数组。尝试将数组声明为静态数组并在静态构造函数中对其进行初始化:

private static City[] cc = new City[10000];

static CityDists()
{
cc[2].name = "Lae, Papua New Guinea"; cc[2].lat = 123; cc[2].lon = 123;
cc[3].name = "Rabaul, Papua New Guinea"; cc[3].lat = 123; cc[3].lon = 123;
cc[4].name = "Angmagssalik, Greenland"; cc[4].lat = 123; cc[4].lon = 123;
cc[5].name = "Angissoq, Greenland"; cc[5].lat = 123; cc[5].lon = 123;
...

关于c# - 在 C# 中使用大型静态数组(Windows Phone 7 上的 Silverlight),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4111298/

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