2015-01-13 21 views
1

我有一个这样的课。如何配置这种情况下的资源

Class { 

    DataTable GetDetails(){ 

    DataTable dt = new DataTable; 

    try{ 
     dt = // assigning records here. 
     return dt; 
    } 
    catch{ 
    } 
    finally{ 
    } 

    } 
} 

而这种方法用于其他类。 在这种情况下,如何实现IDispose,它会产生什么好的影响?

我是C#的新手,我刚刚阅读了关于处置的内容,并没有能够让我自己清楚在那个 中执行我的情况。

如何释放此DataTable?

+1

如果你正在返回数据表,那么你应该在调用代码中处理它,而不是在这个方法中。 –

+1

如果该类返回一个DataTable,它不应该负责处理DataTable,该类的消费者应该是。否则,您最终可能会遇到这样的情况,即您发布的类会处理DataTable,而接收它的类仍在使用它。 –

+5

DataTable没有任何可处置的东西。它只是从它的基类继承了这个方法。哪些没有做任何事情。不要打扰。 –

回答

3

没有理由为这个类实现IDisposable。 IDisposable仅用于非托管资源:诸如套接字,文件句柄,GDI资源,数据库连接和委托订阅等内容。这个班不使用这些。

我怀疑是因为我传递了一些大数据,是不是很好处理?

绕过巨大的数据是无关紧要的:这仍然是记忆,记忆是一个管理资源。同样,IDisposable仅适用于非托管资源。

+0

感谢您的回复..所以在这种情况下,不是必需的权利? – shanmugharaj

+0

没错。一次性使用IDisposable没有任何用处。 –

-1

您正在返回DataTable类型的实例,因此它必须在其使用的类/实例中处置或释放。或者改变模式并返回从DataTable实例中提取的东西,并在finally/catch中放置数据表。

+1

我认为这是更好的理由不在样品中有任何'.Dispose'调用 - 类和方法不要*拥有*任何一次性物品,因此不需要处理。由调用者决定如何处理返回的“DataTable”(可以按照Hans Passant/Servy的建议不做任何事情)。 –