This
topic contains information about key features and improvements in the .NET
Framework version 4. This topic does not provide comprehensive information
about all new features and is subject to change.
The
.NET Framework 4 introduces an improved security model. For more information,
see Security Changes in the .NET Framework 4.
Other
new features and improvements in the .NET Framework 4 are described in the
following sections:
Application
Compatibility and Deployment
Core
New Features and Improvements
Managed
Extensibility Framework
Parallel
Computing
Networking
Web
Client
Data
Communications
and Workflow
Application Compatibility and Deployment
The
.NET Framework 4 is highly compatible with applications that are built with
earlier .NET Framework versions, except for some changes that were made to
improve security, standards compliance, correctness, reliability, and
performance.
The
.NET Framework 4 does not automatically use its version of the common language
runtime to run applications that are built with earlier versions of the .NET
Framework. To run older applications with .NET Framework 4, you must compile
your application with the target .NET Framework version specified in the
properties for your project in Visual Studio, or you can specify the supported
runtime with the <supportedRuntime> Element in an application
configuration file.
If
your application or component does not work after .NET Framework 4 is
installed, please submit a bug on the Microsoft Connect Web site. You can test
compatibility as described in the .NET Framework 4 Application Compatibility
topic and learn about new features by using the Visual Studio 2010 and .NET
Framework 4 Walkthroughs. For additional information and known migration
issues, visit the .NET Framework Compatibility blog.
The
following sections describe deployment improvements.
Client
Profile
The
.NET Framework 4 Client Profile supports more platforms than in previous
versions and provides a fast deployment experience for your Windows
Presentation Foundation (WPF), console, or Windows Forms applications. For more
information, see .NET Framework Client Profile.
In-Process
Side-by-Side Execution
This
feature enables an application to load and start multiple versions of the .NET
Framework in the same process. For example, you can run applications that load
add-ins (or components) that are based on the .NET Framework 2.0 SP1 and
add-ins that are based on the .NET Framework 4 in the same process. Older
components continue to use the older .NET Framework version, and new components
use the new .NET Framework version. For more information, see In-Process
Side-by-Side Execution.
Core New Features and Improvements
The
following sections describe new features and improvements provided by the
common language runtime and the base class libraries.
Diagnostics
and Performance
Earlier
versions of the .NET Framework provided no way to determine whether a
particular application domain was affecting other application domains, because
the operating system APIs and tools, such as the Windows Task Manager, were
precise only to the process level. Starting with the .NET Framework 4, you can
get processor usage and memory usage estimates per application domain.
You
can monitor CPU and memory usage of individual application domains. Application
domain resource monitoring is available through the managed and native hosting
APIs and event tracing for Windows (ETW). When this feature has been enabled,
it collects statistics on all application domains in the process for the life
of the process. See the new AppDomain..::.MonitoringIsEnabled property.
You
can now access the ETW events for diagnostic purposes to improve performance.
For more information, see CLR ETW Events and Controlling .NET Framework
Logging. Also see Performance Counters and In-Process Side-By-Side
Applications.
The
System.Runtime.ExceptionServices..::.HandleProcessCorruptedStateExceptionsAttribute
attribute enables managed code to handle exceptions that indicate corrupted
process state.
Garbage
Collection
The
.NET Framework 4 provides background garbage collection. This feature replaces
concurrent garbage collection in previous versions and provides better
performance. For more information, see Fundamentals of Garbage Collection.
Code
Contracts
Code
contracts let you specify contractual information that is not represented by a
method's or type's signature alone. The new System.Diagnostics.Contracts
namespace contains classes that provide a language-neutral way to express
coding assumptions in the form of preconditions, postconditions, and object
invariants. The contracts improve testing with run-time checking, enable static
contract verification, and support documentation generation. For more
information, see Code Contracts.
Design-Time-Only
Interop Assemblies
You
no longer have to ship primary interop assemblies (PIAs) to deploy applications
that interoperate with COM objects. In the .NET Framework 4, compilers can
embed type information from interop assemblies, selecting only the types that
an application (for example, an add-in) actually uses. Type safety is ensured
by the common language runtime. See Using COM Types in Managed Code and
Walkthrough: Embedding Type Information from Microsoft Office Assemblies (C#
and Visual Basic).
Dynamic
Language Runtime
The
dynamic language runtime (DLR) is a new runtime environment that adds a set of
services for dynamic languages to the CLR. The DLR makes it easier to develop
dynamic languages to run on the .NET Framework and to add dynamic features to
statically typed languages. To support the DLR, the new System.Dynamic
namespace is added to the .NET Framework.
The
expression trees are extended with new types that represent control flow, for
example, System.Linq.Expressions..::.LoopExpression and
System.Linq.Expressions..::.TryExpression. These new types are used by the
dynamic language runtime (DLR) and not used by LINQ.
In
addition, several new classes that support the .NET Framework infrastructure
are added to the System.Runtime.CompilerServices namespace. For more
information, see Dynamic Language Runtime Overview.
Covariance
and Contravariance
Several
generic interfaces and delegates now support covariance and contravariance. For
more information, see Covariance and Contravariance in Generics.
BigInteger
and Complex Numbers
The
new System.Numerics..::.BigInteger structure is an arbitrary-precision integer
data type that supports all the standard integer operations, including bit
manipulation. It can be used from any .NET Framework language. In addition,
some of the new .NET Framework languages (such as F# and IronPython) have
built-in support for this structure.
The
new System.Numerics..::.Complex structure represents a complex number that
supports arithmetic and trigonometric operations with complex numbers.
Tuples
The
.NET Framework 4 provides the System..::.Tuple class for creating tuple objects
that contain structured data. It also provides generic tuple classes to support
tuples that have from one to eight components (that is, singletons through
octuples). To support tuple objects that have nine or more components, there is
a generic tuple class with seven type parameters and an eighth parameter of any
tuple type.
File
System Enumeration Improvements
New
file enumeration methods improve the performance of applications that access
large file directories or that iterate through the lines in large files. For
more information, see How to: Enumerate Directories and Files.
Memory-Mapped
Files
The
.NET Framework now supports memory-mapped files. You can use memory-mapped
files to edit very large files and to create shared memory for interprocess
communication.
64-Bit
Operating Systems and Processes
You
can identify 64-bit operating systems and processes with the
Environment..::.Is64BitOperatingSystem and Environment..::.Is64BitProcess
properties.
You
can specify a 32-bit or 64-bit view of the registry with the
Microsoft.Win32..::.RegistryView enumeration when you open base keys.
Other
New Features
The
following list describes additional new capabilities, improvements, and
conveniences. Several of these are based on customer suggestions.
To
support culture-sensitive formatting, the System..::.TimeSpan structure
includes new overloads of the ToString, Parse, and TryParse methods, as well as
new ParseExact and TryParseExact methods.
The
new String..::.IsNullOrWhiteSpace method indicates whether a string is null,
empty, or consists only of white-space characters. New overloads have been
added to the String.Concat and String.Join methods that concatenate members of
System.Collections.Generic..::.IEnumerable<(Of <(T>)>) collections.
The
String..::.Concat method lets you concatenate each element in an enumerable
collection without first converting the elements to strings.
Two
new convenience methods are available: StringBuilder..::.Clear and
Stopwatch..::.Restart.
The
new Enum..::.HasFlag method determines whether one or more bit fields or flags
are set in an enumeration value. The Enum..::.TryParse method returns a Boolean
value that indicates whether a string or integer value could be successfully
parsed.
The
System..::.Environment..::.SpecialFolder enumeration contains several new
folders.
You
can now easily copy one stream into another with the CopyTo method in classes
that inherit from the System.IO..::.Stream class.
New
Path..::.Combine method overloads enable you to combine file paths.
The
new System..::.IObservable<(Of <(T>)>) and
System..::.IObserver<(Of <(T>)>) interfaces provide a generalized
mechanism for push-based notifications.
The
System..::.IntPtr and System..::.UIntPtr classes now include support for the
addition and subtraction operators.
You
can now enable lazy initialization for any custom type by wrapping the type
inside a System..::.Lazy<(Of <(T>)>) class.
The
new System.Collections.Generic..::.SortedSet<(Of <(T>)>) class
provides a self-balancing tree that maintains data in sorted order after
insertions, deletions, and searches. This class implements the new
System.Collections.Generic..::.ISet<(Of <(T>)>) interface.
The
compression algorithms for the System.IO.Compression..::.DeflateStream and
System.IO.Compression..::.GZipStream classes have improved so that data that is
already compressed is no longer inflated. Also, the 4-gigabyte size restriction
for compressing streams has been removed.
The
new Monitor..::.Enter(Object, Boolean%) method overload takes a Boolean
reference and atomically sets it to true only if the monitor is successfully
entered.
You
can use the Thread..::.Yield method to have the calling thread yield execution
to another thread that is ready to run on the current processor.
The
System..::.Guid structure now contains the TryParse and TryParseExact methods.
The
new Microsoft.Win32..::.RegistryOptions enumeration lets you specify a volatile
registry key that does not persist after the computer restarts.