2012-05-27 27 views
3

我正在一个网站上工作,我想要一个下拉菜单来显示城市列表。我应该在哪里存储更快访问的城市列表?我不想将这些数据存储在数据库中。如何在C#中存储静态数据列表?

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

+0

比什么更快?你可以将它存储在任何地方 - 内存,磁盘,web服务等 - 但首先告诉我们需求。 –

+0

您可以将其保存在代码隐藏的列表中?这将是难看的代码寿.. – Thousand

+1

如果你不能把它在内存中,那么没有比数据库更快。 –

回答

0

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

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

但是,对于小型应用程序,XML文件将会很好。

0

如果列表永远不会更改,那么只需在代码中将其声明为一个常量字符串数组即可。

如果偶尔会发生更改,请将其放入xml文件或数据库表中,但在读取它时缓存它,因此只需在任何会话中读取一次即可。

0

我什么建议是HORID风格,但我认为你可以得到最快和用最小的“足迹”:

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

现在,我希望你不喜欢的解决方案,并且可以给我们所有更多的背景,以便我们能够为您的问题提供优雅和可维护的解决方案;但如果你所有的速度是...

0

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

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

+0

XmlReader是一个拉解析器,而不是像SAX这样的推解析器。 XmlDocument不是一个好的选择,除非你被困在.NET 2.0中。你想要[XDocument](http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.aspx)。 – dtb

+0

谢谢你纠正我 –

1

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

3

我会将它存储在缓存中,可能带有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,那也没关系,但你必须给每个有变化时发布该文件的所有服务器农场。