草庐IT

C#:List<T>.ForEach(...) 比普通 foreach 循环有什么好处?

我想知道为什么List.ForEach(Action)存在。这样做有什么好处/区别吗:elements.ForEach(delegate(Elementelement){element.DoSomething();});结束foreach(Elementelementinelements){element.DoSomething();}? 最佳答案 一个关键的区别是您可以使用.ForEach方法修改基础集合。使用foreach语法,如果你这样做,你会得到一个异常。这是一个例子(不是最好看,但它有效):staticvoidMain(s

c# - WCF TCP比HTTP快多少

我知道对于WCF,TCP比HTTP快,但我很想知道快多少。我有一个使用HTTP的大型应用程序的性能问题,我正在考虑迁移到netTcp是否会产生足够的性能改进以使投资物有所值。有人知道netTCP与Http绑定(bind)相比发送数据量的差异吗? 最佳答案 到目前为止有很多答案,但没有具体数据。Microsoft进行了一项测试以准确您所询问的内容-WCF服务的HTTP和TCP之间的性能(吞吐量)差异。(测试没有考虑数据包大小!)这表明,对于本次测试中的消息,TCP/二进制提供的吞吐量几乎是HTTP/xml的2倍。此测试的瓶颈是服务器C

c# - 在分隔字符串时,有什么比逗号更独特的分隔符?

我有几个文本框,用户可以在其中输入信息。这可以包括逗号,所以我不能使用标准的逗号分隔字符串。什么是一个很好的分隔符来表示字符串应该根据用户在他们的作品中通常不使用的字符来分隔?我将把这些字段组合成一个字符串,并将它们传递给我的加密方法。在我解密它们之后,我需要能够可靠地将它们分开。如果重要的话,我会使用C#。 最佳答案 |将是我列表中的下一个,并且经常用作CSV的替代品。谷歌“竖线分隔”,你会发现很多例子。string[]items=newstring[]{"Uno","Dos","Tres"};stringtoEncrypt=St

c# - Array.Count() 比 List.Count() 慢得多

使用IEnumerable的扩展方法时Count(),数组至少比列表慢两倍。FunctionCount()List2,299int[]6,903差异从何而来?我知道两者都在调用CountICollection的属性(property):IfthetypeofsourceimplementsICollection,thatimplementationisusedtoobtainthecountofelements.Otherwise,thismethoddeterminesthecount.对于列表,它返回List.Count,对于数组,Array.Length.此外,Array.Len

c# - 为什么从 Expression<Func<>> 创建的 Func<> 比直接声明的 Func<> 慢?

为什么是Func从Expression>创建通过.Compile()比仅使用Func慢得多直接声明?我刚从使用Func更改为直接声明为从Expression>创建的一个在我正在开发的应用程序中,我注意到性能下降了。我刚刚做了一个小测试,Func从表达式创建的时间“几乎”是Func的两倍直接声明。在我的机器上直接Func大约需要7.5秒,Expression>大约需要12.6秒。这里是我使用的测试代码(运行Net4.0)//DirectFunctest1=x=>newFoo(x*2);intcounter1=0;Stopwatchs1=newStopwatch();s1.Start();

c# - 是 Thread.Sleep(Timeout.Infinite);比 while(true){} 更有效?

我有一个控制台应用程序,我想在监听事件的同时一直保持打开状态。我已经测试了Thread.Sleep(Timeout.Infinite);和while(true){}并且都允许在保持控制台应用程序打开的同时引发事件。有没有我应该优先使用的?如果线程正在休眠,是否有任何我不应该做的事情,例如修改类范围内声明的静态集合? 最佳答案 我建议使用ManualResetEvent(或其他WaitHandle),并调用ManualResetEvent.WaitOne.这将具有与永远sleep类似的效果,除了它为您提供了一种干净的方式,可以在需要时

c# - 比私有(private)更私有(private)? (C#)

有时您有一个支持属性的私有(private)字段,您只想通过属性setter设置该字段,以便在该字段发生变化时可以进行额外的处理。问题是仍然很容易意外地从同一类的其他方法中绕过属性setter,而没有注意到您已经这样做了。C#中是否有解决此问题的方法或避免此问题的一般设计原则? 最佳答案 恕我直言,它没有被使用,因为:类必须信任自己如果您的类(class)规模太大以至于一部分人不认识另一部分,则应该将其分开。如果属性背后的逻辑稍微复杂一些,可以考虑将其封装在自己的类型中。 关于c#-比私

c# - 访问器必须比属性或索引器更严格

我有以下类(class):usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data.Odbc;namespaceFramework{publicclassOracleProvider{privateOdbcConnectiondb{get;privateset;}privateStringdbUsername=Settings.Default.Username;privateStringdbPassword=Settings.Default.Passwor

c# - 为什么 OfType<> 比 Cast<> 快?

回答以下问题:HowtoconvertMatchCollectiontostringarray给定两个Linq表达式:vararr=Regex.Matches(strText,@"\b[A-Za-z-']+\b").OfType()//OfType.Select(m=>m.Groups[0].Value).ToArray();和vararr=Regex.Matches(strText,@"\b[A-Za-z-']+\b").Cast()//Cast.Select(m=>m.Groups[0].Value).ToArray();OfType由用户Alex进行了基准测试稍微快一点(并由我自

c# - 在数学方面,F# 真的比 C# 好吗?

尽管是非托管语言,但在实现数学方面,F#真的比C#好吗?如果是这样,为什么? 最佳答案 我认为大部分要点已经被其他人提到了:F#可让您以数学家思考问题的方式解决问题多亏了高阶函数,您可以使用更简单的概念来解决难题默认情况下一切都是不可变的,这使得程序更容易理解(也更容易并行化)确实可以在C#3.0中使用某些F#概念,但也有限制。您不能使用任何递归计算(因为C#没有尾递归),这就是您以函数/数学方式编写原始计算的方式。此外,在C#中编写复杂的高阶函数(将其他函数作为参数)很困难,因为您必须显式编写类型(而在F#中,类型是推断的,但也会