我需要一些关于我应该实现的功能的建议。场景是我们有一个HttpHandler服务器来拦截文件上传。在处理程序中,我需要在内存中保留一个大型字符串字典。字典可能大到100个条目。我想知道将它存储在静态变量中是否安全,因此每次创建处理程序的实例时都不会初始化它(肯定会有很多实例)。一般来说,这种情况下的方法是什么。使用静态字段来保存不会被更改的数据通常更好吗?
答案 0 :(得分:3)
字典中的100个项目实际上并不是很大 - 实际上,这几乎没有达到散列比线性搜索更快的大小。如果初始化后永远不会更改,那么静态可能会起作用 - 我个人尝试在static
和实例之间进行一些其他抽象 - 例如我的“上下文”或“配置”类可以传递到需要它的所有实例。然后我可以有多个并行配置(如果需要),但所有相关的实例可以共享上下文/配置 - 所以没有重复。
答案 1 :(得分:1)
恕我直言,静态场很好。你可以在第一次使用时初始化它。只需确保您正在使用线程同步 你也可以使用单身人士,但我认为,这有点过分了......
答案 2 :(得分:1)
这是一个很好的解决方案。在应用程序启动时初始化字典(例如Global.asax),从那时起就可以读取它了。
答案 3 :(得分:0)
您可以覆盖HttpHandler.IsReusable
并返回false
,以便不会每次都重新创建处理程序。然后,您可以将字典存储在本地成员中。
否则你需要使用静态变量。
你的词典似乎不大 - 100个条目是花生。除非每根弦都长几公斤。
答案 4 :(得分:0)
如果所有实例的字典相同,请使用静态字段,否则使用属性字段
如果您的数据不会被更改,请使用Readonly变量