English 中文(简体)
ASP.NET中的字典查找效率和请求作用域全局变量?可通过global.asax和页面等访问
原标题:Dictionary Lookup Efficiency & Request Scoped Global Variable in ASP.NET? Accessible by global.asax and pages/etc
  • 时间:2011-02-08 23:49:11
  •  标签:
  • c#
  • asp.net

我知道这里有几个关于“请求范围”全局变量的问题得到了回答,但我想挑剔一些具体的问题,也许可以从你们中的一两个人那里获得一些额外的启示

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

问题是,我试图通过减少每个请求对Dictionary的查找来最大限度地提高效率。在页面中只做一次查找就足够简单了,我也可以将对象传递给子控件等。。但是global.asax与Page是分开的,它还需要使用该对象(在Application_BeginRequest和Session_Start中)。

那么,在Application_BeginRequest中查找字典一次,在Session_Start中查找字典(如有必要)一次,以及在Page中查找字典的速度是否可以忽略不计,即使每秒都有许多请求

我希望我能有一个请求范围的全局变量,我可以很容易地调用它。。不过,我看到的唯一可用的是HttpContext.Current.Items,它本身就是一个Dictionary。

我是不是对效率过于挑剔?还是从长远来看,当越来越多的请求被发出时,这些毫秒(纳秒?)会让我失望吗

谢谢

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

最佳回答

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

和往常一样,当性能是一个问题时,尝试进行分析(有可用的工具)在进行微优化之前。否则,您可能会浪费时间优化应用程序的错误部分。

问题回答

我认为不值得尝试对其进行更多的优化,想象一下用超快速查找方法(tree、btree或其他任何方法)实现的Dictionary。

事实上,如果你有100、200或10000个对象,那么在按关键字搜索时,只需很少的时间就可以找到合适的值,你可能不会注意到任何差异。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Transaction handling with TransactionScope

I am implementing Transaction using TransactionScope with the help this MSDN article http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx I just want to confirm that is ...

System.Web.Mvc.Controller Initialize

i have the following base controller... public class BaseController : Controller { protected override void Initialize(System.Web.Routing.RequestContext requestContext) { if (...

Microsoft.Contracts namespace

For what it is necessary Microsoft.Contracts namespace in asp.net? I mean, in what cases I could write using Microsoft.Contracts;?

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!