草庐IT

lazy-init

全部标签

c# - 存储库模式 : Implementation and lazy loading of model relationships

我有一个处理产品和产品类别的应用程序。对于其中的每一个,我都有使用POCO定义的模型。//Representsaproduct.classProduct{publicvirtualintID{get;set;}publicvirtualstringName{get;set;}publicvirtualProductCategoryCategory{get;set;}}//Representsaproductcategory.classProductCategory{publicvirtualintID{get;set;}publicvirtualstringName{get;set;}

c# - 带有过期时间的 Lazy<T>

我想在惰性对象上实现过期时间。过期冷却时间必须从第一次检索值开始。如果我们得到该值,并且过期时间已过,那么我们重新执行该函数并重置过期时间。我不熟悉扩展、部分关键字,我不知道最好的方法。谢谢编辑:到目前为止的代码:新编辑:新代码:publicclassLazyWithExpiration{privatevolatileboolexpired;privateTimeSpanexpirationTime;privateFuncfunc;privateLazylazyObject;publicLazyWithExpiration(Funcfunc,TimeSpanexpirationTime

c# - Structuremap 是否支持开箱即用的 Lazy?

structuremap是否允许您以懒惰的方式进行构造函数注入(inject)?意思是在使用之前不创建被注入(inject)的对象? 最佳答案 更新:StructureMapv3开箱即用,因此不再需要此技巧。StructureMap版本2没有,但通过一些技巧,您可以让它完成我认为您正在寻找的事情。首先,您已经可以连接Lazy像这样手动实例:container=newContainer(x=>{x.Scan(y=>{y.TheCallingAssembly();y.WithDefaultConventions();});x.For>(

c# - Lazy<T> 延迟加载错误 : A field initializer cannot reference the non-static field, 方法或属性

我第一次尝试使用延迟加载来初始化我的类中的进度对象。但是,我收到以下错误:Afieldinitializercannotreferencethenon-staticfield,method,orproperty.privateLazym_progress=newLazy(()=>{longtotalBytes=m_transferManager.TotalSize();returnnewProgress(totalBytes);});在.NET2.0中,我可以执行以下操作,但我更愿意使用更新的方法:privateProgressm_progress;privateProgressPro

c# - Lazy<T> 与标准惰性实例化相比有哪些优势?

考虑这个例子,它展示了延迟初始化的两种可能方式。除了线程安全之外,在此处使用Lazy是否有任何特定优势?classCustomer{privatedecimal?_balance2;privatestaticdecimalGetBalanceOverNetwork(){//lengthynetworkoperationsThread.Sleep(2000);return99.9M;}publicdecimal?GetBalance2Lazily(){return_balance2??(_balance2=GetBalanceOverNetwork());}privatereadonly

c# - 如何使用 Lazy 处理并发请求?

我是C#的新手,正在尝试了解如何使用Lazy。我需要通过等待已运行操作的结果来处理并发请求。数据请求可能会同时使用相同/不同的凭据。对于每组唯一的凭据,最多可以进行一个GetDataInternal调用,该调用的结果会在准备就绪时返回给所有排队的服务员privatereadonlyConcurrentDictionary>Cache=newConcurrentDictionary>();publicDataGetData(Credentialcredential){//Thisinstancewillbethrownawayifacached//valuewithour"credent

c# - 将 Stream 转换为 IEnumerable。如果可能当 "keeping laziness"

我收到一个Stream并需要将IEnumerable传递给另一个方法。publicstaticvoidstreamPairSwitchCipher(StreamsomeStream){...someStreamAsIEnumerable=...IEnumerablereturned=anotherMethodWhichWantsAnIEnumerable(someStreamAsIEnumerable);...}一种方法是读取整个Stream,将其转换为字节数组并将其传入,因为Array实现了IEnumerable。但如果我能以这样一种方式传递它,在传递它之前我不必阅读整个Stream

c# - nest yields to return IEnumerable<IEnumerable<T>> with lazy evaluation

我写了一个LINQ扩展方法SplitBetween类似于String.Split.>newList(){3,4,2,21,3,2,17,16,1}>.SplitBetween(x=>x>=10)[3,4,2],[3,2],[],[1]来源://partitionsequenceintosequenceofcontiguoussubsequences//behaveslikeString.SplitpublicstaticIEnumerable>SplitBetween(thisIEnumerablesource,FuncseparatorSelector,boolincludeSepa

c# - Lazy<T> ExecutionAndPublication - 可能导致死锁的示例

LazyThreadSafetyMode的文档声明如果初始化方法(或默认构造函数,如果没有初始化方法)在内部使用锁,则使用值ExecutionAndPublication可能会导致死锁。我试图更好地理解使用此值时可能导致死锁的示例。在我使用这个值时,我正在初始化一个ChannelFactory.我看不到ChannelFactory的构造函数使用任何内部锁(使用Reflector查看类),所以我相信这种情况不符合可能的死锁情况,但我很好奇什么情况会导致死锁以及是否可能死锁初始化ChannelFactory。总而言之,我的问题是:使用ExecutionAndPublication初始化Ch

c# - Lazy<T> 是线程安全的惰性加载单例的良好解决方案吗?

我们在get上使用双重锁定实现了一个延迟加载的单例,以确保实例只初始化一次(而不是由于线程竞争条件而初始化两次)。我想知道是否只使用Lazy是解决这个问题的好方法吗?即.privatestaticLazy_instance=newLazy(()=>returnnewMyClass());publicstaticMyClassInstance{get{return_instance.Value;}} 最佳答案 我建议你阅读评论中的引用文章:LazyClassImplementingtheSingletonPatterninC#在所有情