在每个程序员应该知道的.NET Framework 4中的东西

我最近搬到了Visual Studio 2010,并将我的网站升级到.NET Framework 4.(来自VS 2008 – Framework 3.5)

为了提高站点速度,可读性或内存使用量,我需要了解哪些内容?

  • 并行for循环

    Parallel.For(0,10,(i)=> { // Do stuff in parallel. }); 

Parallel类的其余部分提供了一些其他很棒的东西,例如Parallel.Invoke(...)Parallel.ForEach(...)

此外,如果您对Linq执行任何操作,则可以使用ParallelEnumerable.AsParallel()方法将Linq查询转换为并行运行。

它都build立在任务并行库上 ,它提供了一套完善的API,以一种抽象的方式处理任务,可以扩展机器的任何资源,而不必过多地考虑到你创build多less个线程。

除了GetDirectoriesGetFiles方法之外, DirectoryInfo类现在还有惰性版本EnumerateDirectoriesEnumerateFiles ,它们可以避免我们拥有庞大的数组来保存所有的对象。

string.Join()现在有一个带IEnumerable<T>的签名,而不仅仅是string[] – 这是一个小的改进,它允许你翻出你的.Select().ToArray()代码。

令人敬畏的事情,客户端ID可以被操纵:

http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-and-net- 4-0,series.aspx

没有更多的CTL0001 $ _DIV0003_TextBox1001 $或其他…

我只是喜欢web.config文件是小而有意义的事实,而不是长期和充满未知的陈述…

可选参数是我的最爱之一。 dynamictypes似乎是有希望的

C#如何实现event字段是新的。 它不再在内部做一个非常糟糕的lock (this)默认情况下。 事件仍然是线程安全的,但是因为现在使用了Interlocked.CompareExchange(...)机制。

这导致了一些可能在一些边缘情况下打破的变化。 更多信息:

  • Chris Burrows的博客:事件在C#4中得到了一些改进,第一部分:locking
  • Chris Burrows的博客:事件在C#4中进行了一些修改,第二部分:语义变化和+ = / – =
  • 频道9:旋风14:C#4中的新变化 – 事件

Enum.TryParse

Guid.TryParse

System.Numerics.BigInteger – 表示一个任意大的有符号整数。

System.Numerics.Complex – 表示一个复数。

代码合同看起来非常有希望,从创build更加正确的代码的angular度来看,也是从生成更完整的文档的angular度来看。 可悲的是,他们并不是所有的VS2010中 – 你必须安装一个附加组件,即使这样既不完整也没有完成,似乎仍然是一个正在进行的工作。

您可以使用内存映射文件(与原生Windows函数访问内存映射文件的方式相同)编辑非常大的文件并为进程间通信创build共享内存。 有关详细的解释,请参阅: http : //msdn.microsoft.com/en-us/library/dd997372.aspx

对于ASP.NET程序员来说,ASP.NET 4和Visual Studio 2010 Web开发概述白皮书全面概述了ASP.NET 4中的新function。对于一系列关于最显着和有趣的更改的文章,我推荐Scott Gutherie的VS 2010和.NET 4系列博文 。

ASP.netcaching现在在它自己的程序集!

System.runtime.caching.dll

这意味着您可以在其他应用程序(如WPF和WinForms)中使用,而无需引入整个system.web程序集

我只是希望他们能够加强CacheItem以包含有关caching项目的内置信息,例如何时添加…何时会过期,等等

我还会参考原始文档(本例中为MSDN),以获取全面的改进和补充列表:

http://msdn.microsoft.com/en-us/library/ms171868.aspx

从这篇文章中,您可以轻松find可以改进现有代码库的东西。

为了便于阅读,我将在自己的问题中加上自己的发现。

使用AJAX时,您可以指定ScriptManager的EnableCdn属性以从CDN(例如Microsoft CDN)加载值,

我相信也有WCF的增强,消除了以前的烦恼,如不能为每个端点在.Net 3.5中configurationWebGet / WebInvoke不同。 我相信它在4.0中是完全可configuration的。