如何在C#中存储静态数据列表?

时间:2012-05-27 11:29:02

标签: c# performance static

我正在网站上工作,我想要一个下拉列表来显示城市列表。我应该在哪里存储城市列表以便更快地访问?我不想将这些数据存储在DB中。

将它存储在XML文件中是一个好主意吗?

6 个答案:

答案 0 :(得分:3)

我会将它存储在Cache中,可能还有Sql依赖项或文件依赖项。

public DataTable GetCities(bool BypassCache)
{
   string cacheKey = "CitiesDataTable";
   object cacheItem = Cache[cacheKey] as DataTable;
   if((BypassCache) || (cacheItem == null))
   {
      cacheItem = GetCitiesFromDataSource();
      Cache.Insert(cacheKey, cacheItem, null,
      DateTime.Now.AddSeconds(GetCacheSecondsFromConfig(cacheKey), 
      TimeSpan.Zero);
   }
   return (DataTable)cacheItem;
}

如果要将其存储在XML中,那也没关系,但每次发生更改时,您都必须将文件发布到服务器场中的所有服务器。

答案 1 :(得分:1)

将其存储在文本文件中。这避免了XML解析的开销。使用File.ReadAllLines()加载。

答案 2 :(得分:0)

您可以将列表存储为XML文件或其他平面文件格式,但我想这取决于您不希望将其存储在数据库中的原因。

您提到了更快的访问权限,但您可能希望对此进行阐述。如果您的意思是您不希望在每个请求上访问数据库的开销,那么您是否考虑过将其存储在数据库中并在应用程序启动时缓存列表?这样,您就可以获得数据库的好处,但只需支付一次开销。

但对于小型应用程序,XML文件就可以了。

答案 3 :(得分:0)

如果列表永远不会改变,那么只需在代码中将其声明为字符串的const数组。

如果它偶尔会改变,那么把它放在一个xml文件或一个数据库表中,但是当你读完它时就将它缓存,所以它只需要在任何会话中读取一次。

答案 4 :(得分:0)

我要建议的是HORID风格,但我认为你可以获得最快的速度和最小的“足迹”:

public static readonly string [] CityList = new string [] 
{
  "Sydney",
  "New York",
  "London"
};

现在,我希望您不喜欢这个解决方案,并且可以为我们提供更多的上下文,以便我们能够为您的问题提供优雅且可维护的解决方案;但如果你所有的后续速度都是......

答案 5 :(得分:0)

我相信XML是最好的解决方案,使用DOM解析器而不是SAX会更好。

您也可以在未加载文件时将文件加载到会话中以减少XML的读取次数,但这将在服务器上使用更多RAM,请确保不加载不必要的数据,因为它将被加载到每个会话的服务器RAM。如果有意义,您只能为登录用户加载它。