摘要:
当我们建立一个小的应用程序而并非是一个真正的项目的时候,可能经常会要把它拷贝到不同的机器上去运行,这个时候,我觉得就没必要把数据库(我这里以sqlserver为例)和程序分开单独的建立在自己的电脑上了,因为程序一动,还要拷贝数据库文件,这样一来就麻烦了。我们可以直接把数据库建立在项目里面。 这样一来,移动项目的时候,把项目拷走,数据库文件就一起跟着走了,但是这样可能还会有一个问题,如果我们之前使用的连接字符串是直接从程序中的数据库测试连接那里面拷贝过来的话,就会出现路径不对的问题。我以前学习ADO.NET的时候,就经常这样做。直接从这里面去拷贝。拷贝出来的字符串是这样的:Data Sourc. 阅读全文
摘要:
本质上来说,引用计数策略和垃圾收集策略都属于资源的自动化管理。所谓自动化管理,就是在逻辑层不知道资源在什么时候被释放掉,而依赖底层库来维持资源的生命期。而手工管理,则是可以准确的知道资源的生命期,在准确的位置回收它。在 C++ 中,体现在析构函数中写明 delete 用到的资源,并由编译器自动生成的代码析构基类和成员变量。所以,为 C++ 写一个垃圾收集器,并不和手工管理资源冲突。自动化管理几乎在所有有点规模的 C++ 工程中都在使用,只不过用的是引用计数的策略而非垃圾收集而已。也就是说,我们使用 C++ 或 C 长期以来就是结合了手工管理和自动管理在构建系统了。无论用引用计数,还是用垃圾收集 阅读全文
摘要:
与引用计数不同,垃圾回收只保证在以后的某个时间终止无用对象。这种终止方式的不确定性会产生什么样的影响呢?如果程序中为对象在其生存期内分配稀有资源会出现什么情况呢?这里提到的“稀有资源”,是指为专属访问而打开的文件、Windows对象的句柄和数据库的连接等。作为一个优秀的编程人员,应当能通过实现对象的析构函数来释放所有需要的资源。但是,垃圾回收器只是周期性地运作,因此垃圾回收器在运行它的析构函数和释放对象时,该对象往往已经有较长时间没有被使用。从这个意义上讲,所有稀有资源也是空闲的。这样,如果一个对象在其生存期内必须分配稀有资源时,它应当使用一个公开的拆卸方法,使得用户尽可能显式地释放对象。Mi 阅读全文
摘要:
本文介绍了Effective C#原则:调用Dispose()方法,任何时候你在调用Dispose()方法的类型时,你就有责任来调用Dispose()方法来释放资源。学习C#时,经常会遇到Effective C#原则问题,这里将介绍调用Dispose()方法解决Effective C#原则问题。Effective C#原则(一)使用非托管资源的类型必须实现IDisposable接口的Dispose()方法来精确的释放系统资源。.Net环境的这一规则使得释放资源代码的职责是类型的使用者,而不是类型或系统。因此,任何时候你在调用Dispose()方法的类型时,你就有责任来调用Dispose()方法 阅读全文