首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CompiledQuery.Compile需要锁(EF4、Server、C#)

CompiledQuery.Compile需要锁(EF4、Server、C#)
EN

Stack Overflow用户
提问于 2011-06-07 23:03:05
回答 1查看 224关注 0票数 2

我有以下代码,我想知道是否需要锁:

专用静态函数_GetAccountAttributeGroup;

公共静态AccountAttributeGroup GetAccountAttributeGroup( AcbsContainer objectContext,long?)( id)

{ if (id == null) {返回null;} if (_GetAccountAttributeGroup == null) { _GetAccountAttributeGroup = CompiledQuery.Compile((ctx,key) => ctx.AccountAttributeGroups.FirstOrDefault(e> => e.Id == key));}返回_GetAccountAttributeGroup(objectContext,id.Value);}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-07 23:11:38

我可能会使用双重检查(例如,检查是否为null;如果为null,则锁定并再次检查;如果仍然为null,则执行编译和分配的工作)。然而,这主要是为了防止在冷启动期间重复工作,而不是其他任何事情.

如果工作量很小(例如,小于编译),我可以使用局部变量来完成这项工作,然后使用Interlocked.CompareExchange来赋值If (并且只有当)字段仍然为null。这意味着所有线程都得到相同的值,但可能意味着重复的工作(除了第一个线程被丢弃)。

如果可能出现这种情况,我实际上会使用一个静态字段初始化器,因为它具有较少的运行时开销;那时不需要锁。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6272573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档