The new features and improvements
are described in the following sections:
Programming Languages
Common Language Runtime (CLR)
Base Class Libraries
Networking
Web
Client
Data
Communications
Workflow
Programming Languages
Common Language Runtime (CLR)
Base Class Libraries
Networking
Web
Client
Data
Communications
Workflow
Common Language Runtime (CLR)
The following sections describe new
features in security, parallel computing, performance and diagnostics, dynamic
language runtime, and other CLR-related technologies.
Security
The .NET Framework 4.0 provides
simplifications, improvements, and expanded capabilities in the security model.
For more information, see Security Changes in the .NET Framework 4.
Parallel
Computing
The .NET Framework 4.0 introduces a
new programming model for writing multithreaded and asynchronous code that
greatly simplifies the work of application and library developers. The new
model enables developers to write efficient, fine-grained, and scalable
parallel code in a natural idiom without having to work directly with threads
or the thread pool. The new Parallel
and Task
classes, and other related types, support this new model. Parallel LINQ
(PLINQ), which is a parallel implementation of LINQ to Objects, enables similar
functionality through declarative syntax. For more information, see Parallel Programming in the .NET Framework.
Performance
and Diagnostics
In addition to the following
features, the .NET Framework 4.0 provides improvements in startup time, working
set sizes, and faster performance for multithreaded applications.
ETW
Events
You can now access the Event Tracing
for Windows (ETW) events for diagnostic purposes to improve performance. For
more information, see the following topics:
Performance Monitor (Perfmon.exe)
now enables you to disambiguate multiple applications that use the same name
and multiple versions of the common language runtime loaded by a single
process. This requires a simple registry modification. For more information,
see Performance Counters and In-Process Side-By-Side
Applications.
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 pre-conditions,
post-conditions, and object invariants. The contracts improve testing with
run-time checking, enable static contract verification, and documentation
generation.
The applicable scenarios include the
following:
- Perform static bug finding, which enables some bugs to be found without executing the code.
- Create guidance for automated testing tools to enhance test coverage.
- Create a standard notation for code behavior, which provides more information for documentation.
Lazy
Initialiation
With lazy initialization, the memory
for an object is not allocated until it is needed. Lazy initialization can
improve performance by spreading object allocations evenly across the lifetime
of a program. You can enable lazy initialization for any custom type by
wrapping the type inside a System..::.Lazy<(Of <(T>)>) class.
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. 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.
In-Process
Side-by-Side Execution
In-process side-by-side hosting
enables an application to load and activate multiple versions of the common
language runtime (CLR) in the same process. For example, you can run
applications that are based on the .NET Framework 2.0 SP1 and applications that
are based on .NET Framework 4.0 in the same process. Older components continue
to use the same CLR version, and new components use the new CLR version. For
more information, see Hosting Changes in the .NET Framework 4.
Interoperability
New interoperability features and
improvements include the
following:
- You no longer have to use primary interop assemblies (PIAs). Compilers embed the parts of the interop assemblies that the add-ins actually use, and type safety is ensured by the common language runtime.
- You can use the System.Runtime.InteropServices..::.ICustomQueryInterface interface to create a customized, managed code implementation of the IUnknown::QueryInterface method. Applications can use the customized implementation to return a specific interface (except IUnknown) for a particular interface ID.
Profiling
In the .NET Framework 4.0, you can
attach profilers to a running process at any point, perform the requested
profiling tasks, and then detach. For more information, see the
[IClrProfiling::AttachProfiler]IClrProfiling Interface::AttachProfiler Method
method.
Garbage
Collection
The .NET Framework 4.0 provides
background garbage collection; for more information, see the entry So, what’s new in the CLR 4.0 GC?
in the CLR Garbage Collector blog.
Covariance
and Contravariance
Several generic interfaces and
delegates now support covariance and contravariance. For more information, see Covariance and Contravariance in the Common
Language Runtime.
Base Class Libraries
The following sections describe new
features in collections and data structures, exception handling, I/O,
reflection, threading, and Windows registry.
Collections
and Data Structures
Enhancements in this area include
the new System.Numerics..::.BigInteger structure, the System.Collections.Generic..::.SortedSet<(Of
<(T>)>) generic class, and tuples.
BigInteger
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.
SortedSet
Generic 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 System.Collections.Generic..::.HashSet<(Of
<(T>)>) class also implements the ISet<(Of <(T>)>) interface.
Tuples
A tuple is a simple generic data
structure that holds an ordered set of items of heterogeneous types. Tuples are
supported natively in languages such as F# and IronPython, but are also easy to
use from any .NET Framework language such as C# and Visual Basic. The ..NET
Framework 4.0 adds eight new generic tuple classes, and also a Tuple
class that contains static factory methods for creating tuples.
Exceptions
Handling
The .NET Framework 4.0 class library
contains the new System.Runtime.ExceptionServices namespace, and adds the ability to handle corrupted state
exceptions.
Corrupted
State Exceptions
The CLR no longer delivers corrupted
state exceptions that occur in the operating system to be handled by managed
code, unless you apply the HandleProcessCorruptedStateExceptionsAttribute attribute to the method that handles the corrupted state
exception.
Alternatively, you can add the
following setting to an application's configuration file:
legacyCorruptedStateExceptionsPolicy=true
I/O
The key new features in I/O are
efficient file enumerations, memory-mapped files, and improvements in isolated
storage and compression.
File
System Enumeration Improvements
New enumeration methods in the Directory
and DirectoryInfo
classes return IEnumerable<(Of <(T>)>) collections instead of arrays. These methods are more
efficient than the array-based methods, because they do not have to allocate a
(potentially large) array and you can access the first results immediately
instead of waiting for the complete enumeration to occur.
There are also new methods in the
static File
class that read and write lines from files by using IEnumerable<(Of <(T>)>) collections. These methods are useful in LINQ scenarios
where you may want to quickly and efficiently query the contents of a text file
and write out the results to a log file without allocating any arrays.
Memory-Mapped
Files
The new System.IO.MemoryMappedFiles namespace provides memory mapping functionality, which is
available in Windows. You can use memory-mapped files to edit very large files
and to create shared memory for inter-process communication. The new System.IO..::.UnmanagedMemoryAccessor class enables random access to unmanaged memory, similar to
how System.IO..::.UnmanagedMemoryStream enables sequential access to unmanaged memory.
Isolated
Storage Improvements
Partial-trust applications, such as
Windows Presentation Framework (WPF) browser applications (XBAPs) and ClickOnce
partial-trust applications, now have the same capabilities in the .NET
Framework as they do in Silverlight. The default quota size is doubled, and
applications can prompt the user to approve or reject a request to increase the
quota. The System.IO.IsolatedStorage..::.IsolatedStorageFile class contains new members to manage the quota and to make
working with files and directories easier.
Compression
Improvements
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. This results in much better compression
ratios. Also, the 4-gigabyte size restriction for compressing streams has been
removed.
Reflection
The .NET Framework 4.0 provides the
capability to monitor the performance of your application domains.
Application
Domain Resource Monitoring
Until now, there has been no way to
determine whether a particular application domain is 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.0, you can get processor usage and memory usage estimates per
application domain.
Application domain resource
monitoring is available through the managed AppDomain
class, 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.
For more information, see the <appDomainResourceMonitoring> Element, and the following properties in the AppDomain
class:
- MonitoringIsEnabled
- MonitoringSurvivedMemorySize
- MonitoringSurvivedProcessMemorySize
- MonitoringTotalAllocatedMemorySize
- MonitoringTotalProcessorTime
64-bit
View and Other Registry Improvements
Windows registry improvements
include the following:
- Ability to specify a 32-bit or 64-bit view of the registry with the Microsoft.Win32..::.RegistryView enumeration when you open base keys.
- the new Microsoft.Win32..::.RegistryOptions enumeration, which lets you specify a volatile registry key that does not persist after the computer restarts.
Threading
General threading improvements
include the following:
- 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 following sections describe new
threading features.
Unified
Model for Cancellation
The .NET Framework 4.0 provides a
new unified model for cancellation of asynchronous operations. The new System.Threading..::.CancellationTokenSource class is used to create a CancellationToken that may be passed to any number of operations on multiple
threads. By calling Cancel()()() on the token source object, the IsCancellationRequested property on the token is set to true and the token’s wait
handle is signaled, at which time any registered actions with the token are
invoked. Any object that has a reference to that token can monitor the value of
that property and respond as appropriate.
Thread-Safe
Collection Classes
The new System.Collections.Concurrent namespace introduces several new thread-safe collection
classes that provide lock-free access to items whenever useful, and
fine-grained locking when locks are appropriate. The use of these classes in
multi-threaded scenarios should improve performance over collection types such
as ArrayList,
and List<(Of <(T>)>).
Synchronization
Primitives
New synchronization primitives in
the System.Threading namespace enable fine-grained concurrency and faster
performance by avoiding expensive locking mechanisms. The Barrier
class enables multiple threads to work on an algorithm cooperatively by
providing a point at which each task can signal its arrival and then block
until the other participants in the barrier have arrived. The CountdownEvent
class simplifies fork and join scenarios by providing an easy rendezvous
mechanism. The ManualResetEventSlim class is a lock-free synchronization primitive similar to
the ManualResetEvent class. ManualResetEventSlim is lighter weight but can only be used for intra-process
communication. The SemaphoreSlim
class is a lightweight synchronization primitive that limits the number of
threads that can access a resource or a pool of resources at the same time; it
can be used only for intra-process communication. The SpinLock
class is a mutual exclusion lock primitive that causes the thread that is
trying to acquire the lock to wait in a loop, or spin, until the lock becomes
available. The SpinWait
class is a small, lightweight type that will spin for a time and eventually put
the thread into a wait state if the spin count is exceeded.
Networking
Enhancements have been made that
affect how integrated Windows authentication is handled by the HttpWebRequest,
HttpListener,
SmtpClient,
SslStream,
NegotiateStream,
and related classes in the System.Net
and related namespaces. Support was added for extended protection to enhance
security. The changes to support extended protection are available only for
applications on Windows 7. The extended protection features are not available
on earlier versions of Windows. For more information, seeIntegrated Windows Authentication with Extended
Protection.
Web
The following sections describe new
features in ASP.NET core services, Web Forms, Dynamic Data, and Visual Web
Developer.
ASP.NET
Core Services
ASP.NET introduces several features
that improve core ASP.NET services, Web Forms, Dynamic Data, and Visual Web
Developer. For more information, see What’s New in ASP.NET and Web Development.
ASP.NET
Web Forms
Web Forms has been a core feature in
ASP.NET since the release of ASP.NET 1.0. Many enhancements have been made in
this area for ASP.NET 4, including the following:
- The ability to set meta tags.
- More control over view state.
- Easier ways to work with browser capabilities.
- Support for using ASP.NET routing with Web Forms.
- More control over generated IDs.
- The ability to persist selected rows in data controls.
- More control over rendered HTML in the FormView and ListView controls.
- Filtering support for data source controls.
Dynamic
Data
For ASP.NET 4, Dynamic Data has been
enhanced to give developers even more power for quickly building data-driven
Web sites. This includes the following:
- Automatic validation that is based on constraints defined in the data model.
- The ability to easily change the markup that is generated for fields in the GridView and DetailsView controls by using field templates that are part of your Dynamic Data project.
Visual
Web Developer Enhancements
The Web page designer in Visual
Studio 2010 has been enhanced for better CSS compatibility, includes additional
support for HTML and ASP.NET markup code examples, and features a redesigned
version of IntelliSense for JScript. In addition, two new deployment features
called Web packaging and One-Click Publish make deploying Web applications
easier.
Client
The following sections describe new features
in Windows Presentation Foundation (WPF) and Managed Extensibility Framework
(MEF).
Windows
Presentation Foundation
In the .NET Framework 4.0, Windows
Presentation Foundation (WPF) contains changes and improvements in many areas.
This includes controls, graphics, and XAML.
For more information, see What's New in Windows Presentation Foundation
Version 4.
Managed
Extensibility Framework
The Managed Extensibility Framework
(MEF) is a new library in the .NET Framework 4.0 that enables you to build
extensible and composable applications. MEF enables application developers to
specify points where an application can be extended, expose services to offer
to other extensible applications, and create parts for consumption by
extensible applications. It also enables easy discoverability of available
parts based on metadata, without the need to load the assemblies for the parts.
For more information, see Managed Extensibility Framework.
For a list of the MEF types, see the System.ComponentModel.Composition
namespace.
Data
For more information, see What's New in ADO.NET.
Expression
Trees
Expression trees are extended with
new types that represent control flow, for example, LoopExpression
and TryExpression.
These new types are used by the dynamic language runtime (DLR) and not used by
LINQ.
Communications
Windows Communication Foundation
(WCF) provides the new features and enhancements described in the following
sections.
Support
for WS-Discovery
The Service Discovery feature
enables client applications to dynamically discover service addresses at run
time in an interoperable way using WS-Discovery. The WS-Discovery specification
outlines the message-exchange patterns (MEPs) required for performing
lightweight discovery of services, both by multicast (ad hoc) and unicast
(using a network resource).
Standard
Endpoints
Standard endpoints are pre-defined
endpoints that have one or more of their properties (address, binding,
contract) fixed. For example, all metadata exchange endpoints specify IMetadataExchange as their contract, so there is no need for a developer to
have to specify the contract. Therefore, the standard MEX endpoint has a fixed IMetadataExchange contract.
Workflow
Services
With the introduction of a set of
messaging activities, it is easier than ever to implement workflows that send
and receive data. These messaging activities enable you to model complex
message exchange patterns that go outside the traditional send/receive or
RPC-style method invocation.
Workflow
Windows Workflow Foundation (WF) in
.NET Framework 4.0 changes several development paradigms from earlier versions.
Workflows are now easier to create, execute, and maintain.
Workflow
Activity Model
The activity is now the base unit of
creating a workflow, instead of using the SequentialWorkflowActivity or StateMachineWorkflowActivity classes. The WorkflowElement
class provides the base abstraction of workflow behavior. Activity authors
implement WorkflowElement
objects imperatively when they have to use the breadth of the runtime. The Activity
class is a data-driven WorkflowElement
object where activity authors express new behaviors declaratively in terms of
other activity objects.
Richer
Composite Activity Options
The Flowchart class is a powerful
new control flow activity that enables authors to construct process flows more
naturally. Procedural workflows benefit from new flow-control activities that
model traditional flow-control structures, such as TryCatch and Switch.
Expanded
Built-in Activity Library
New features of the activity library
include the following:
- Data access activities for interacting with ODBC data sources.
- New flow control activities such as DoWhile, ForEach, and ParallelForEach.
- Activities for interacting with PowerShell and SharePoint.
Enhanced
Persistence and Unloading
Workflow state data can be
explicitly persisted by using the Persist activity. A host can persist a WorkflowInstance without unloading it. A workflow can specify no-persist
zones when working with data that cannot be persisted so that persistence is
postponed until the no-persist zone exits.
Improved
Ability to Extend WF Designer Experience
The new WF Designer is built on
Windows Presentation Foundation (WPF) and provides an easier model to use when
rehosting the WF Designer outside Visual Studio. It also provides easier
mechanisms for creating custom activity designers. For more information, see Extending the Workflow Designer.
No comments:
Post a Comment