草庐IT

automatic-ref-counting

全部标签

c# - 在不锁定集合的情况下从通用集合中获取 Count 值是安全的吗?

我有两个线程,一个生产者线程将对象放入通用列表集合中,另一个消费者线程将这些对象从同一个通用列表中拉出。我已经使用lock关键字正确同步了对集合的读取和写入,并且一切正常。我想知道是否可以在不先锁定集合的情况下访问Count属性。JaredPar引用计数属性inhisblog作为可能导致竞争条件的决策程序,如下所示:if(list.Count>0){returnlist[0];}如果列表中有一个项目,并且在访问Count属性之后但在索引器之前删除了该项目,则会发生异常。我明白了。但是使用Count属性可以确定一个完全不同的集合的初始大小吗?MSDNdocumentation说实例成员不

引用类型的 C# 7 ref 返回

我正在浏览一些使用C#7的新功能并使用reflocals&returns功能的代码。对于value-types来说,ref局部变量获取引用(对实际存储)并更新原始项的值似乎非常简单。一点解释将有助于理解在reference-types的reflocals情况下内存引用是如何工作的。我指的是下面代码的最后一行://AsimpleclasspublicclassCoolClass{publicstringName{get;set;}publicintId{get;set;}publicCoolClass(stringname,intid)=>(Name,Id)=(name,id);}//D

c# - Linq 加入 COUNT 个

我有2个表,论坛和帖子。我想用一个新的额外字段检索所有论坛字段:计算属于该论坛的所有帖子。我现在有这个:varv=(fromforuminForumsjoinpostinPostsonforum.ForumIDequalspost.Forum.ForumIDselectnew{forum,//Needtoretrieveallfields/columnsfromforumPostCount=//countallpostthatbelongtothisforumwithacondition:countitonlyifpost.Showit==1}).Distinct()连接必须是左连接:

c# - list.count 是在物理上遍历列表来计算它,还是保留一个指针

我正在遍历一个大的对象列表来对列表中的所述对象做一些事情。在我的迭代过程中,我会根据特定条件从列表中删除一些对象。完成所有操作后,我需要根据列表中的对象数量更新UI。(T列表)。问题:WhenIcalllist.count,does.netactuallyiteratethroughthelisttocountit,ordoesitstorethecountasaproperty/variable?如果.net在物理上重复遍历列表,我也可以在自己遍历列表时保留一个计数器,从而节省开销?谢谢 最佳答案 它只是保留一个内部整数来跟踪项目

c# - 在C#中,使用List<T>时,缓存Count属性好不好,还是属性够快?

换句话说,如果有的话,下面哪个会更快?ListmyList;......foreach(WhateverwhateverinSomeOtherLongList){...if(i或ListmyList;......intlistCount=myList.Count;foreach(WhateverwhateverinSomeOtherLongList){...if(i谢谢:) 最佳答案 Count只是一个整数。当你问它的值(value)时,它不会被计算出来。它是“预先计算的”,所以是一样的。选项1更具可读性:)

c# - 如何为 IQueryable.Count 获取 ToTraceString

我使用((ObjectQuery)IQueryable).ToTraceString()获取和调整将由LINQ执行的SQL代码。我的问题是,与大多数IQueryable方法不同,IQueryable.Count定义如下:publicstaticintCount(thisIQueryablesource){return(int)source.Provider.Execute(Expression.Call(typeof(Queryable),"Count",newType[]{source.ElementType},source.Expression));}执行查询而不编译并返回IQue

c# - LINQ Count() until,这样效率更高吗?

假设我想检查集合中是否至少有N个元素。这比做更好吗?Count()>=N使用:publicstaticboolAtLeast(thisIEnumerableenumerable,intmax){intcount=0;returnenumerable.Any(item=>++count>=max);}甚至publicstaticboolEquals(thisIEnumerableenumerable,intamount){returnenumerable.Take(amount).Count()==amount;}我如何进行基准测试?//////Returnswhethertheenum

c# - 使用 ref 参数委托(delegate)

有什么方法可以在下面的代码中保持相同的功能,而不必创建委托(delegate)?我正在与包含多种DeleteSomethingX(refIntPtrptr)方法的第3方API交互,并且我正在尝试集中IntPtr.Zero检查的代码。privatevoiddelegateCleanupDelegate(refIntPtrptr);...privatevoidCleanup(refIntPtrptr,CleanupDelegatecleanup){if(ptr!=IntPtr.Zero){cleanup(refptr);}} 最佳答案

C# 4.0 'dynamic' 没有设置 ref/out 参数

我正在试验DynamicObject。我尝试做的一件事是设置ref/out参数的值,如下面的代码所示。但是,我无法正确设置Main()中的i和j的值(即使它们在TryInvokeMember())。有谁知道如何使用ref/out参数调用DynamicObject对象并能够检索方法中设置的值?classProgram{staticvoidMain(string[]args){dynamicproxy=newProxy(newTarget());inti=10;intj=20;proxy.Wrap(refi,refj);Console.WriteLine(i+":"+j);//Print"

c# - ref 参数和赋值在同一行

我最近遇到了一个讨厌的错误,简化后的代码如下所示:intx=0;x+=Increment(refx);...privateintIncrement(refintparameter){parameter+=1;return1;}Increment调用后x的值为1!一旦我发现发生了什么,这很容易解决。我将返回值分配给一个临时变量,然后更新x。我想知道如何解释这个问题。我忽略了规范中的某些内容还是C#的某些方面。 最佳答案 +=读取左侧参数然后读取右侧参数,因此它读取变量,执行递增方法,对结果求和,然后分配给变量。在这种情况下,它读取0,