ADO.NET最佳实践(上)

ado

    概述:

    本文在微软站点资源的基础上加工整理而成,意在介绍在你的ADO.NET应用程序中执行和完成性能优化、稳定性和功能性方面提供最佳的解决方案;同时也包含在ADO.NET中运用已有的数据对象进行开发的最佳实践和帮助你怎样设计ADO.NET应用程序提供建议。

    本文包含以下内容:

    1..NET框架中的data providers;

    2.对照DataSet和DataReader,分别介绍他们的最佳用途;

    3.如何使用DataSet、Commands和Connections;

    4.结合XML;

    5.如果你是ADO程序员,也不妨看看ADO.NET与ADO的区别和联系;

    6.结合一些FAQ,更深一步讨论ADO.NET观点和使用技巧。

    介绍:

    A..NET框架中的data providers

        Data providers在应用程序和数据库之间扮演一个桥梁的角色,它使得你可以从一个数据库返回查询结果、执行命令以及对数据集的更新等。

    B.几种data provider的介绍

        下面表格中数据表明各种data provider以及最佳适用数据库对象

提供者

描述

SQL Server.NET Data Provider

在.NET框架中使用System.Data.SqlClient命名空间;

建议在中间层应用程序中使用SQL Server7.0或以后版本;

建议在独立的应用程序中使用MSDE或SQL Server7.0或更高版本;

SQL Server6.5或更早版本,必须使用OLE DB.NET Data Provider中的OLE DB Provider For SQL Server。

OLE DB.NET Data Provider

在.NET框架中使用System.Data.OleDb命名空间;

建议在中间层应用程序中使用SQL Server6.5或以前版本,或者任何在.NET框架SDK中指出的支持OLE DB接口清单的OLE DB Provider,OLE DB接口清单将在后面列出;

建议在独立的应用程序中使用Access,中间层应用程序不建议使用Access;

不再支持为ODBC的OLE DB Provider,要访问ODBC,使用ODBC.NET Data Provider。

ODBC.NET Data Provider

在.NET框架中使用System.Data.Odbc命名空间;

提供对使用ODBC驱动连接的数据库的访问;

.NET Data Provider For Oracle

在.NET框架中使用System.Data.OracleClient命名空间;

提供对Oracle数据库的访问。

Custom.NET Data Provider

提供一套接口,让你可以自定义一个Data Provider;

SQLXML Managed Classes

包含SQLXML Managed Classes的最新版SQLXML3.0,使得你可以访问SQL Server2000或以后版本的XML功能性扩展,比如执行XML模板文件、执行XPath查询和使用Updategrams或Diffgrams更新数据等;在SQLXML 3.0中存储过程和XML模板将会通过SOAP作为一种WEB服务。

        表格中提到的OLE DB接口清单,在这里把它列出

OLE DB 对象

接口

OLE DB Services

IdataInitilize

DataSource

IDBInitialize
IDBCreateSession
IDBProperties
IPersist
IDBInfo*

Session

ISessionProperties
IOpenRowset
IDBSchemaRowset*
ITransactionLocal*
IDBCreateCommand*

Command

IcommandText
ICommandProperties
ICommandWithParameters*
IAccessor (only required if ICommandWithParameters is supported)
ICommandPrepare*

MultipleResults

ImultipleResults

RowSet

Irowset
IAccessor
IColumnsInfo
IColumnsRowset*
IRowsetInfo (only required if DBTYPE_HCHAPTER is supported)

Row

IRow*

Error

IerrorInfo
IErrorRecords
ISQLErrorInfo*

    C.连接SQL Server7.0或更高版本

        使用SQL Server.NET Data Provider连接SQL Server7.0或更高版本是最好的方式,在于它建立与SQL Server的直接连接而中间不需要任何的技术层衔接。如下图一展示了各种访问SQL Server7.0或更高版本的技术比较:

图一(连接访问SQL Server7.0或更高版本的各种技术比较)

        以下例子演示怎样创建和打开一个到SQL Server7.0或更高版本数据库的连接:

‘Visual Basic

Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;" & _                                                   "Initial Catalog=northwind")

nwindConn.Open()

‘C#

SqlConnection nwindConn = new SqlConnection("Data Source=localhost; Integrated Security=SSPI;" +

"Initial Catalog=northwind");

nwindConn.Open();

    D.连接ODBC数据源

        ODBC.NET Data Provider,使用System.Data.Odbc命名空间,拥有为SQL Server和OLE DB的.NET Data Porvider一样的结构,使用ODBC前缀(比如OdbcConnetion)和标准的ODBC连接字符。下面例子演示怎样创建和打开一个到ODBC数据源的连接:

‘Visual Basic

Dim nwindConn As OdbcConnection = New OdbcConnection("Driver={SQL Server};Server=localhost;" & _                                                     "Trusted_Connection=yes;Database=northwind")

nwindConn.Open()

‘C#

OdbcConnection nwindConn = new OdbcConnection("Driver={SQL Server};Server=localhost;" +

"Trusted_Connection=yes;Database=northwind");

nwindConn.Open();

    E.使用DataReaders、DataSets、DataAdapters和DataViews

        ADO.NET使用DataSet和DataReader对象读取数据并存储。DataSet就好比是数据库的直系亲属,拥有数据库的所有表、顺序和数据库的约束(比如表间关系)。DataReader则从数据库读取快速的、只进的的和只读的数据流。使用DataSet,你将会经常使用DataAdapter(或者CommandBuilder)与你的数据库打交道,同时,你也许会使用DataView去排序和过滤数据,DataSet还允许你可以创建一个继承于DataSet的子对象来表现数据中的表、行和列。下面图二显示DataSet对象模型:

图二(DataSet对象模型)

下面将要介绍在什么时候使用DataSet或DataReader最恰当,同时也将说明如何使用DataAdapter(包括CommandBuilder)和DataView最优化对数据的访问。

    F.DataSet和DataReader的比较

        在设计你的应用程序时决定究竟使用DataSet还是使用DataReader,主要看在你的应用程序中要实现的功能性级别。

        使用DataSet可以在你的应用程序中做以下事情:

        I.在多个离散的结果表之间导航;

            一个DataSet可以包含多个结果表,这些结果表是不连续的。你可以分开处理这些表,也可以把这些表当作父子关系进行处理。

        II.操作多个数据源(比如从XML文件和电子数据表等不只一个数据库得到的混合数据);

        下面的例子演示从SQL Server2000的Northwind数据库读取一个customers表的清单和从Access2000的Northwind数据库读取一个orders表的清单,然后使用DataRelation在两个表之间建立一个对应关系:

‘Visual Basic

Dim custConn As SqlConnection= New SqlConnection("Data Source=localhost;Integrated Security=SSPI;" & _

"Initial Catalog=northwind;")

Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Customers", custConn)

Dim orderConn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _                                                       "Data Source=c:\Program Files\Microsoft Office\" & _                                                       "Office amples\northwind.mdb;")

Dim orderDA As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM Orders", orderConn)

custConn.Open()

orderConn.Open()

Dim custDS As DataSet = New DataSet()

custDA.Fill(custDS, "Customers")

orderDA.Fill(custDS, "Orders")

custConn.Close()

orderConn.Close()

Dim custOrderRel As DataRelation = custDS.Relations.Add("CustOrders", _                                     custDS.Tables("Customers").Columns("CustomerID"), _                                     custDS.Tables("Orders").Columns("CustomerID"))

Dim pRow, cRow As DataRow

For Each pRow In custDS.Tables("Customers").Rows

  Console.WriteLine(pRow("CustomerID").ToString())

  For Each cRow In pRow.GetChildRows(custOrderRel)

    Console.WriteLine(vbTab & cRow("OrderID").ToString())

  Next

Next

‘C#

SqlConnection custConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;");

SqlDataAdapter custDA = new SqlDataAdapter("SELECT * FROM Customers", custConn);

OleDbConnection orderConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +                                                "Data Source=c:\\Program Files\\Microsoft Office\\Office\ amples\\northwind.mdb;");

OleDbDataAdapter orderDA = new OleDbDataAdapter("SELECT * FROM Orders", orderConn);

custConn.Open();

orderConn.Open();

DataSet custDS = new DataSet();

custDA.Fill(custDS, "Customers");

orderDA.Fill(custDS, "Orders");

custConn.Close();

orderConn.Close();

DataRelation custOrderRel = custDS.Relations.Add("CustOrders",                              custDS.Tables["Customers"].Columns["CustomerID"],                              custDS.Tables["Orders"].Columns["CustomerID"]);

foreach (DataRow pRow in custDS.Tables["Customers"].Rows)

{

  Console.WriteLine(pRow["CustomerID"]);

   foreach (DataRow cRow in pRow.GetChildRows(custOrderRel))

    Console.WriteLine("\t" + cRow["OrderID"]);

}

        III.层中交换数据或者使用一个XML WEB服务,与DataReader不一样的是DataSet可以被传递给一个远程的客户端;

            下面的例子演示如何创建一个XML WEB服务,其中使用GetCustomers取数据库中customers表数据,使用UpdateCustomers更新数据库中数据:

1.     ‘Visual Basic

2.     <% @ WebService Language = "VB" Class = "Sample" %>

3.     Imports System

4.     Imports System.Data

5.     Imports System.Data.SqlClient

6.     Imports System.Web.Services

7.     <WebService(Namespace:="http://microsoft.com/webservices/")> _

8.     Public Class Sample

9.       Public nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")

10.    <WebMethod( Description := "Returns Northwind Customers", EnableSession := False )> _

11.    Public Function GetCustomers() As DataSet

12.      Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", nwindConn)

13.      Dim custDS As DataSet = New DataSet()

14.      custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey

15.      custDA.Fill(custDS, "Customers")

16.      GetCustomers = custDS

17.    End Function

18.    <WebMethod( Description := "Updates Northwind Customers", EnableSession := False )> _

19.    Public Function UpdateCustomers(custDS As DataSet) As DataSet

20.      Dim custDA As SqlDataAdapter = New SqlDataAdapter()

21.      custDA.InsertCommand = New SqlCommand("INSERT INTO Customers (CustomerID, CompanyName) " & _                                          "Values(@CustomerID, @CompanyName)", nwindConn)

22.      custDA.InsertCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID")

23.      custDA.InsertCommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 15, "CompanyName")

24.      custDA.UpdateCommand = New SqlCommand("UPDATE Customers Set CustomerID = @CustomerID, " & _

25.  "CompanyName = @CompanyName WHERE CustomerID = @OldCustomerID", nwindConn)

26.      custDA.UpdateCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID")

27.      custDA.UpdateCommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 15, "CompanyName")

28.      Dim myParm As SqlParameter = custDA.UpdateCommand.Parameters.Add("@OldCustomerID", SqlDbType.NChar, 5, "CustomerID")

29.      myParm.SourceVersion = DataRowVersion.Original

30.      custDA.DeleteCommand = New SqlCommand("DELETE FROM Customers WHERE CustomerID = @CustomerID", nwindConn)

31.      myParm = custDA.DeleteCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID")

32.      myParm.SourceVersion = DataRowVersion.Original

33.      custDA.Update(custDS, "Customers")

34.      UpdateCustomers = custDS

35.    End Function

36.  End Class

37.   

38.  ‘C#

39.  <% @ WebService Language = "C#" Class = "Sample" %>

40.  using System;

41.  using System.Data;

42.  using System.Data.SqlClient;

43.  using System.Web.Services;

44.  [WebService(Namespace="http://microsoft.com/webservices/")]

45.  public class Sample

46.  {

47.    public SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");

48.    [WebMethod( Description = "Returns Northwind Customers", EnableSession = false )]

49.    public DataSet GetCustomers()

50.    {

51.      SqlDataAdapter custDA = new SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", nwindConn);

52.      DataSet custDS = new DataSet();

53.      custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;

54.      custDA.Fill(custDS, "Customers");

55.      return custDS;

56.    }

57.    [WebMethod( Description = "Updates Northwind Customers", EnableSession = false )]

58.    public DataSet UpdateCustomers(DataSet custDS)

59.    {

60.      SqlDataAdapter custDA = new SqlDataAdapter();

61.      custDA.InsertCommand = new SqlCommand("INSERT INTO Customers (CustomerID, CompanyName) " +                                          "Values(@CustomerID, @CompanyName)", nwindConn);

62.      custDA.InsertCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");

63.      custDA.InsertCommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 15, "CompanyName");

64.      custDA.UpdateCommand = new SqlCommand("UPDATE Customers Set CustomerID = @CustomerID, " + "CompanyName = @CompanyName WHERE CustomerID = @OldCustomerID", nwindConn);

65.      custDA.UpdateCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");

66.      custDA.UpdateCommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 15, "CompanyName");

67.      SqlParameter myParm = custDA.UpdateCommand.Parameters.Add("@OldCustomerID", SqlDbType.NChar, 5, "CustomerID");

68.      myParm.SourceVersion = DataRowVersion.Original;

69.      custDA.DeleteCommand = new SqlCommand("DELETE FROM Customers WHERE CustomerID = @CustomerID", nwindConn);

70.      myParm = custDA.DeleteCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");

71.      myParm.SourceVersion = DataRowVersion.Original;

72.      custDA.Update(custDS, "Customers");

73.      return custDS;

74.    }

}

        IV.数据的再使用(比如排序、搜索或过滤数据);

        V.执行每行的大容量数据处理,处理DataReader挂起的连接服务已不再需要、影响性能的每一行;

        VI.使用诸如XSLT转换或者XPath查询等XML操作的多重数据。

            下面的例子介绍如何使用XmlDataDocument同步DataSet数据和如何使用XSLT样式文件在HTML文件中包含DataSet数据,首先是XSLT样式文件:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="CustomerOrders">

  <HTML>

  <STYLE>

  BODY {font-family:verdana;font-size:9pt}

  TD   {font-size:8pt}

  </STYLE>

    <BODY>

    <TABLE BORDER="1">

      <xsl:apply-templates select="Customers"/>

    </TABLE>

    </BODY>

  </HTML>

</xsl:template>

<xsl:template match="Customers">

    <TR><TD>

      <xsl:value-of select="ContactName"/>, <xsl:value-of select="Phone"/><BR/>

    </TD></TR>

      <xsl:apply-templates select="Orders"/>

</xsl:template>

<xsl:template match="Orders">

  <TABLE BORDER="1">

    <TR><TD valign="top"><B>Order:</B></TD><TD valign="top"><xsl:value-of select="OrderID"/></TD></TR>

    <TR><TD valign="top"><B>Date:</B></TD><TD valign="top"><xsl:value-of select="OrderDate"/></TD></TR>

    <TR><TD valign="top"><B>Ship To:</B></TD>

        <TD valign="top"><xsl:value-of select="ShipName"/><BR/>

        <xsl:value-of select="ShipAddress"/><BR/>

        <xsl:value-of select="ShipCity"/>, <xsl:value-of select="ShipRegion"/>  <xsl:value-of select="ShipPostalCode"/><BR/>

        <xsl:value-of select="ShipCountry"/></TD></TR>

  </TABLE>

</xsl:template>

</xsl:stylesheet>

            接着下面的代码演示如何填充DataSet的数据和运用XSLT样式:

‘Visual Basic

Imports System

Imports System.Data

Imports System.Data.SqlClient

Imports System.Xml

Imports System.Xml.Xsl

Public Class Sample

  Public Shared Sub Main()

    Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Initial Catalog=northwind;Integrated Security=SSPI")

    nwindConn.Open()

    Dim myDataSet As DataSet = New DataSet("CustomerOrders")

    Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Customers", nwindConn)

    custDA.Fill(myDataSet, "Customers")

    Dim ordersDA As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Orders", nwindConn)

    ordersDA.Fill(myDataSet, "Orders")

    nwindConn.Close()

    myDataSet.Relations.Add("CustOrders",_                            myDataSet.Tables("Customers").Columns("CustomerID"),_                            myDataSet.Tables("Orders").Columns("CustomerID")).Nested = true

    Dim xmlDoc As XmlDataDocument = New XmlDataDocument(myDataSet)

    Dim xslTran As XslTransform = New XslTransform

    xslTran.Load("transform.xsl")

    Dim writer As XmlTextWriter = New XmlTextWriter("xslt_output.html", System.Text.Encoding.UTF8)

    xslTran.Transform(xmlDoc, Nothing, writer)

    writer.Close()

  End Sub

End Class

‘C#

using System;

using System.Data;

using System.Data.SqlClient;

using System.Xml;

using System.Xml.Xsl;

public class Sample

{

  public static void Main()

  {

    SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Initial Catalog=northwind;Integrated Security=SSPI;");

    nwindConn.Open();

    DataSet custDS = new DataSet("CustomerDataSet");

    SqlDataAdapter custDA = new SqlDataAdapter("SELECT * FROM Customers", nwindConn);

    custDA.Fill(custDS, "Customers");

    SqlDataAdapter ordersDA = new SqlDataAdapter("SELECT * FROM Orders", nwindConn);

    ordersDA.Fill(custDS, "Orders");

    nwindConn.Close();

    custDS.Relations.Add("CustOrders",

                         custDS.Tables["Customers"].Columns["CustomerID"],

                         custDS.Tables["Orders"].Columns["CustomerID"]).Nested = true;

    XmlDataDocument xmlDoc = new XmlDataDocument(custDS);

    XslTransform xslTran = new XslTransform();

    xslTran.Load("transform.xsl");

    XmlTextWriter writer = new XmlTextWriter("xslt_output.html", System.Text.Encoding.UTF8);

    xslTran.Transform(xmlDoc, null, writer);

    writer.Close();

  }

}

ADO.NET最佳实践(中)

http://www.csdn.net/Develop/read_article.asp?id=22663

时间: 2024-09-17 04:49:20

ADO.NET最佳实践(上)的相关文章

ADO.NET最佳实践(中)

ado         使用DataReader可以在你的应用程序中做以下事情:         I.不需要缓存数据:         II.处理太大而不能存储的数据:         III.需要以只进.只读和快速方式一次性访问数据的.     G.使用一个自定义的强有力的DataSet类型的好处         通过创建一个继承于DataSet的子对象,你可以在运行期间执行类型检查和声明.当你有了一个确定的计划或者为你的DataSet有相关的结构,你就可以创建一个用行和列表述一个对象的Dat

ADO.NET最佳实践(下)

ado     T.与XML结合         ADO.NET在DataSet中提供对XML的广泛支持,同时在SQL Server2000或以后版本中的XML功能性扩展也能在ADO.NET中得到充分运用.你可以使用SQLXML访问在SQL Server2000和以后版本中提供的XML功能性扩展.下面是使用XML和ADO.NET的一些技巧信息.         I.DataSet和XML         DataSet和XML的完美整合,可以使你完成以下事情:             ①从XSD

ivy中文参考文档(6)-最佳实践(上)

这里有一些我们从我们的经验和一些客户的顾问工作中收集到的建议和最佳实践. 1) 为所有的模块添加模块描述符 在ivy的世界种,模块描述符是ivy文件的一种,基本上是简单的xml文件,用来描述模块生产什么作为制品和它的依赖. 为你的开发涉及到的所有模块编写或者下载模块描述符是一个好习惯,甚至是为你的第三方依赖,哪怕他们不提供他们自己的模块描述 符. 开始这将看上去像是一个额外的工作,并且需要时间.但是当你拥有多个模块同时使用相同的第三方类库,你仅仅需要在你的ivy文件 中添加一行就可以得到这个类库

性能、稳定性、反压、Exactly Once,Jstorm开源最佳实践全解析

在2017年在线技术峰会--阿里开源项目最佳实践上,来自阿里巴巴中间件的技术专家卫乐分享了Jstorm开源最佳实践.他主要介绍了Jstorm的架构,从性能.稳定性.监控系统.大规模部署.反压.灰度发布&热升级.Exactly-Once.新的窗口机制等方面详细扥想了Jstorm做的优化.以下内容根据直播视频整理而成. 关于阿里中间件,欢迎访问官网了解更多:https://www.aliyun.com/aliware 视频回顾:点击进入 Pdf下载:点击进入   发展历史   JStorm从2013

使用ADO.NET的最佳实践

ado [简介]ADO.NET作为微软最新的数据访问技术,已经在企业开发中得到了广泛的应用.对于一线的开发人员来说,掌握基本的概念和技术之后,提高应用水平和解决实际问题的最有效手段,莫过于相互交流彼此的最佳时间经验经验.在这篇文章中,两位ADO.NET专家向读者毫无保留地.详尽地介绍了很多实用经验. 简介本文为您提供了在Microsoft ADO.NET应用程序中实现和获得最佳性能.可伸缩性以及功能的最佳解决方案:同时也讲述了使用ADO.NET中可用对象的最佳实践:并提出一些有助于优化ADO.N

ADO.NET 的最佳实践技巧_自学过程

这是我很早以前看过的微软的一篇文章,最近,一些网友问的问题很多理论都在里面,所以,整理一下放在这里,大家可以参考一下. 简介 本文为您提供了在 Microsoft ADO.NET 应用程序中实现和获得最佳性能.可伸缩性以及功能的最佳解决方案:同时也讲述了使用 ADO.NET 中可用对象的最佳实践:并提出一些有助于优化 ADO.NET 应用程序设计的建议. 本文包含: • 有关 .NET 框架包含的 .NET 框架数据提供程序的信息. • DataSet 和 DataReader 之间的比较,以及

EJB 3.0在WAS V7上开发部署的最佳实践

引言 IBM WebSphere Application Server 从 7.0 版本起开始正式支持 EJB 3.0(在之前的 6.1 版本有发布针对 EJB 3.0 的功能部件包).目前建立于 WAS V7 上的 EJB 3.0 应用并不常见.作者在实际项目中总结了使用 WAS V7 部署 EJB 3.0 应用遇到的一些问题(部分为开发细节)及最佳实践,并试图通过一些简单的例子将这些经验展现给需要在 WAS V7 环境下开发 EJB 3.0 应用的开发者们. 本文建立在如下条件之上: 使用

PgSQL · 最佳实践 · 云上的数据迁移

title: PgSQL · 最佳实践 · 云上的数据迁移 author: 义从 背景 大多数使用云产品作为 IT 解决方案的客户同时使用多款云产品是一个普遍现象. 用户在多款云产品之间转移数据成为一个基础的需求. 例如 1. 用户把线下机房中的 Oracle 数据库中的数据 迁移到云上 RDS PPAS 中. 2. 使用 RDS MYSQL 做为数据库支撑交易型业务场景,同时使用 HybridDB for PostgreSQL 作数据仓库解决方案. 3. 把 ODPS 中的大量数据导入到 Hy

Docker在云平台上的最佳实践: 当容器服务遇到深度学习

12月9日云栖计算之旅线下沙龙第2期<Docker在云平台上的最佳实践>,阿里云技术专家必嘫给大家带来了"当容器服务遇到了深度学习"的演讲.本文主要从深度学习的兴起开始谈起,进而介绍了Docker技术.阿里云容器服务,重点介绍了支持云上的高性能计算应用需要哪些,包括GPU的调度.隔离和监控. 视频回顾 深度学习 人工智能已经进入了深度学习时代.传统的让机器自动化的方式已经不再适合解决一些问题,机器学习开始兴起,让机器像小孩子一样自己去认识世界.而深度学习本身是机器学习的一个