如下我有一些代码什么的开销使用HttpContext.Items
var MyObjectInstance = httpContext.Items[key] as MyObject
什么开销是有这个代码。是否需要反序列化对象并进行演员表。在减少这些电话的数量方面是否有显着的性能优势?
如下我有一些代码什么的开销使用HttpContext.Items
var MyObjectInstance = httpContext.Items[key] as MyObject
什么开销是有这个代码。是否需要反序列化对象并进行演员表。在减少这些电话的数量方面是否有显着的性能优势?
HttpContext.Items
真的返回一个HashTable
(内存字典) - 这样称呼,如httpContext.Items[key] as MyObject
将基本上已经到
没有反序列化
性能好处将是一个相对术语 - 有多少这样的电话打了几次?这将是一个非常快速的通话,除非您在短时间内拨打数千个电话,我不会太担心。
HttpContext非常大,因此应该避免。在侧面说明它是密封的,因此不能被单元测试和嘲笑。
var MyObjectInstance = httpContext.Items[key] = new MyObject();
项是一个哈希表对象,它包含键和值对,因此速度相对较快。
这篇文章可以帮助:http://msdn.microsoft.com/en-us/magazine/cc163730.aspx
感谢downvote没有评论! –
HttpContext.Items(IDictionary)在收集到服务器端存储的对象是非常有用的,特别是如果我们想要的。看看一些有趣的文章 - 3 hot uses for HttpContext.Current.Items they wont tell you about.和When can we use HttpContext.Current.Items to stores data in ASP.NET?
感谢您的信息。有趣。对于一个网站数量很大的每个请求,它都会被多次调用。我只是在考虑一些重构,以确保每次请求只能调用一次。只是试图决定它是否值得。 –
@ Mark909,它取决于它被调用的地方?例如,如果页面代码重复调用它,则可以将该值缓存在变量中。用户控件可以从页面访问它。您需要通过比较您的平均请求响应时间与此次通话的时间(我相信这将在几微秒范围内)做出决定。 – VinayC
它从PerWebRequest上的Castle实例化对象中调用,所以我可以将它作为变量存储在此对象中,而不是每次都从httpContext读取它。 –