字典查找效率&请求ASP.NET中的Scoped全局变量?可通过global.asax和pages / etc访问

时间:2011-02-08 23:49:12

标签: c# asp.net

我知道这里有一些关于“请求范围”全局变量的回答问题,但我想特别挑选一些东西,并且可能会从你们中的一两个人那里榨取一些额外的启发。

我有一个ASP.NET C#网站和一个静态的对象字典(在应用程序启动时从DB加载一次)。每个页面请求都需要在Dictionary中进行查找(基于从请求url / etc派生的键)并获取相应的对象。

问题是我试图通过减少每个请求的Dictionary的查找来最大化效率。在Page本身内只进行一次查找很容易,我也可以将对象传递给子控件等等。但是global.asax与Page是分开的,它还需要使用该对象(在Application_BeginRequest和Session_Start中)。

所以在Application_BeginRequest中进行一次字典查找,在Session_Start中进行一次(必要时),一次以Page可忽略不计的速度进行,即使每秒都有很多请求进入吗?

如果我能拥有一个可以轻松调用的Request范围全局变量,我想要它。我看到的唯一一个是HttpContext.Current.Items,这是一个Dictionary本身。

我是否因为对效率的关注而过于挑剔?或者这些毫秒(纳秒?)会在我做出越来越多的请求时从长远来看?

感谢。

PS。我目前在词典中只有大约100个对象,尽管将来可能会增加。

2 个答案:

答案 0 :(得分:2)

字典查找(大致)是一个恒定时间操作,所以,是的,我相信你在这里试图过度优化。

与往常一样,当性能出现问题时,请尝试进行性能分析(对此有tools available之前进行微优化。否则,您最终可能会浪费时间来优化应用程序的错误部分。

答案 1 :(得分:2)

我认为不值得尝试进一步优化它,想象一下使用超快速查找方法(树,btree或其他任何东西)实现的字典。

实际上如果你有100个,200个或10.000个对象,那么在按键搜索时找到正确的值会花费很少,你可能不会发现任何差异。