SQL Server CE、 SQL Server 2005 Compact Edition 或 SQL Server 2005 移动版的处置方法从内存托管对象

文章翻译 文章翻译
文章编号: 834279 - 查看本文应用于的产品
展开全部 | 关闭全部

概要

这篇文章讨论到处置的不同方法托管对象在 Microsoft SQL Server 2000 Windows CE 版、 Microsoft SQL Server 2005年精简版,或在 SQL Server 2005 移动版中使用 Microsoft Visual Studio 您创建的应用程序中使用。Net 使用 Microsoft 的问题。NET 小型框架。

更多信息

。SQL Server CE、 SQL Server 2005 的精简版,或 SQL Server 2005 移动版的压缩 NET Framework 数据提供程序支持的类,其中包括集合 SqlCeCommand 类, SqlCeConnection 类,和 SqlCeDataReader 类。您可以使用这些实例的对象从设备中运行 Microsoft Windows CE 的访问 SQL Server CE、 SQL Server 2005 Compact Edition 或 SQL Server 2005 移动版的数据库类托管的环境中。但是,您必须释放分配的内存如果不再需要的对象的对象。

您可以使用以下方法释放的内存分配给类别的对象。

注意 Microsoft 建议您使用 Close) 方法或 Dispose) 要释放的内存的方法,并遵循编码样式对象。NET 包含本机的类引用。
  • 使用 Close) 方法或 Dispose) 方法。所有包含本机的类引用到 SQL Server CE、 SQL Server 2005 Compact Edition,或 SQL Server 2005 移动版实现 IDisposable 接口。因为这些类实现 IDisposable 接口, Dispose) 方法" IDisposable 接口可以用于释放的内存托管的对象。

    这些类还实现 Close) 是的方法类似于 Dispose) 方法。因此,您可以调用任何一个 Close)方法或 Dispose) 要释放的内存分配给的方法对象。但是,如果您调用 Close) 方法,您不必调用 Dispose) 方法。

    例如,当使用 SqlCeDataAdapter 类填充数据集,您必须显式释放所有的关联SqlCeCommand 代表选择命令,实例插入命令,更新命令,或删除命令。您可以使用以下的编码风格。NET 类的包含本机引用:
     SqlCeConnection conn = null; 
     try
     {
    	 conn = new SqlCeConnection(<ConnectionString>);
    	 conn.Open(); 
    	// Work with the connection object
    }
    catch (Exception en)
    {
    	// Handle the exception or rethrow it
    }
    finally
    {
    	// Always release the native references in the finally clause
    	// The statements in finally clause are guaranteed to run
    
    	if (null != conn) conn.Close(); 
    } 
  • 使用 Collect() 方法 GC 垃圾回收器类。

    注意 它是运行成本非常昂贵 Collect() 方法 GC 垃圾回收器类。因此,Microsoft 建议您使用的 Collect()方法 GC 仅当您必须执行此操作时,垃圾回收器类。

    使用以下编码风格调用 Collect()垃圾回收器在您的应用程序中的方法:
    try
    {
           SqlCeConnection conn = null;
           conn = new SqlCeConnection(<ConnectionString>);
           conn.Open(); 
     
           // The connection instance goes out of scope and effectively loses native references here
           // The conn object is only disposed of when the Garbage Collector starts finalizing objects,
           // but this only occurs under memory pressure.
           // If many objects are allocated like this, the performance of the program decreases.
    }
    catch (Exception en)
    {
           // Handle the exception or rethrow it
    }
    finally
    { 
           // If GC.Collect() is called, the Garbage Collector is forced to run all the finalizers in the finalization queue. 
           // Therefore, the connection instance that was previously lost is disposed of here by the Collect method of the GC Garbage Collector class. 
           // By putting this in the finally clause we guarantee it will always be executed even if the exception is rethrown
           
           GC.Collect();
    }
     
    如果您在此列表中的第一个项目符号点中使用的编码风格,您不必显式地调用Collect() 垃圾回收器的方法。

参考

有关详细信息 IDisposable 接口,请访问下面的 Microsoft Web 站点:
http://msdn2.microsoft.com/en-us/library/system.idisposable (vs.71).aspx
有关详细信息" GC。Collect() 方法,请访问下面的 Microsoft 网站:
http://msdn2.microsoft.com/en-us/library/aa903907 (VS.71).aspx
有关详细信息" SqlCeConnection.Close 方法,请访问以下 Microsoft 网站站点:
http://msdn2.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection.close (vs.71).aspx
有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824462如果您使用一个 SqlCeDataAdapter 对象 SqlCeCommand 对象未自动释放
326164 Dumpmem 实用程序,用于查看 Pocket PC 2002 上的虚拟地址空间
827837 修复: SQL Server CE 连接的内存不足情况时,会导致创建多个 SqlCeDataReader 对象

属性

文章编号: 834279 - 最后修改: 2011年12月13日 - 修订: 1.0
这篇文章中的信息适用于:
  • Microsoft .NET Compact Framework
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft SQL Server 2005 Compact Edition
关键字:?
kbgarbagecollect kbmemory kbappdev kbcodesnippet kbcode kbinfo kbmt KB834279 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 834279
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com