1

我目前正在编写一个应用程序,它将为我们的网络服务器自动化几个管理项目。我的问题很简单,但我找不到任何文档;当调用我们的ServerManager通过using Microsoft.Web.Administration时,如果服务器对象连接定期打开和关闭(处置),它会不会有任何性能障碍?

我知道在 SQL 数据库中,频繁的连接调用在很多情况下会降低性能;所以我不想遇到类似的问题。

我试图避免创建一个InstancePersisted传出任务排队然后执行的方式。

如果有人可以让我知道,并指出任何关于它的文档,那就太好了。但就像我说的,我现在找不到任何东西。

一个小规模的例子:

public void AddSite()
{
    ServerManager defaultManager = new ServerManager();

    // Perform Task
    defaultManager.CommitChanges();
    defaultManager.Dispose();
}

public void RemoveSite()
{
    ServerManager defaultManager = new ServerManager();

    // Perform Task
    defaultManager.CommitChanges();
    defaultManager.Dispose();
}

通过本质上基于每种方法构建对象;那么关闭它会影响性能吗?


更新:

该示例是一个非常基本甚至原始的示例。将进行一些重构以遵循良好实践,例如实施IDisposable. 然而,主要的困境是我无法准确地描述与 SQL 相同的变化。

在过度打开和关闭的 SQL 中,您会看到所有服务逐渐蚕食性能,尤其是随着数据库复杂性的增长。

那是我对 IIS 的目标,目前我无法获得准确的表示。性能确实在改变;我知道它加载的大多数服务也在序列化和反序列化解释配置的 XML 文件。

知道 IIS 有多复杂,我将它自动化,但尝试做最简单的路径。我想知道这种简单化的方法是否需要更复杂的方法或重构。由于它确实创建的那些服务和流程确实会消耗资源。

我试图准确地描述那些可能的障碍,但我找不到任何文档甚至是Performance Gains for IIS 的详细信息。

另外,每次我进行测试时,结果都会出现零星的、不一致的,并且最终不可靠。

4

1 回答 1

2

你在寻找这样的东西吗?

   private ServerManager _defaultManager = new ServerManager();

   public void AddSite()
   {
        // perform task
        _defaultManager.CommitChanges();            
    }

    public void RemoveSite()
    {
        // perform task
        _defaultManager.CommitChanges();
    }

    public void Dispose() {
       _defaultManager.Dispose();
    }

您应该能够运行几个测试来确定上述是否确实表现得更好。我已经看到它在这样的事情上是双向的。我确实建议您实现 IDisposable 接口,因为 ServerManager 实现 IDisposable 并且我的代码将使您的类拥有“托管 IDisposable 资源”

http://blog.stephencleary.com/2009/08/how-to-implement-idisposable-and.html

于 2013-03-02T00:12:39.683 回答