在IDisposable.Dispose()中调用数据库更新

时间:2016-03-01 21:51:57

标签: c#

我想在分布式环境中跟踪类实例(比如Class1)的生命周期。对于前者有一台SQL Server计算机,并且有多个IIS服务器连接到该SQL Server计算机。 ASP.NET应用程序的多个实例托管在IIS计算机上(一台计算机上的一个实例)。

对任何IIS服务器上的任何应用程序实例发出每个请求,都会创建一个Class1实例,并将创建时间记录到数据库中。我想知道Class1的实例何时被销毁。

Class1实现IDisposable并在Dispose()方法中将销毁时间记录到数据库中是明智的吗?考虑到更新具有数百万条记录的表可能非常耗时并且这会强制垃圾收集器在处置该对象实例时等待,我不知道该怎么做。

一般问题是:

当性能很重要时,在对象的IDisposable.Dispose()中调用耗时的操作是否明智?

请帮我解决这个问题,

由于

1 个答案:

答案 0 :(得分:0)

如果您需要记录某些内容,则可以执行此操作。很难说如何在不了解细节的情况下影响性能。

但是,这不会告诉您何时销毁对象。它只会告诉你何时调用Dispose方法。垃圾收集器可能不会在那一刻收集它。您可以为Class1提供一个终结器方法(即实现System.Object的Finalize方法)然后编写日志,但即使这样,对象也不会在那时被销毁,因为垃圾收集器将唤起终结器并销毁随后通过的对象。这将增加更多的开销。

由于你无法获得确切的破坏点,并且你似乎只需要通过它的声音来获取此日志的Dispose方法,你可以放弃使用IDisposable。您可以使用一个名为Close()或Finish()的方法,在不再需要该对象时或在它超出范围之前调用它。如果Class1确实实现了IDisposable,则可以在需要时使用它,而不必担心显式调用Dispose方法。