2010-06-11 2 views
-1

У меня приложение я собираюсь написать в ASP.NET MVC, и я хочу, чтобы создать объект DatabaseFactory что-то вроде этого: -Static DB Provider в ASP.NET MVC Причинение утечка памяти

public class DatabaseFactory 
{ 
    private string dbConn get { return <gets from config file>; } 

    public IDatabaseTableObject GetDatabaseTable() 
    { 
    IDatabaseTableObject databaseTableObject = new SQLDatabaseObject(dbConn); 
    return databaseTableObject; 
    } 
} 

и это работает отлично, но я, очевидно, должен создать экземпляр DatabaseFactory в каждом контроллере, который в нем нуждается. Если бы я сделал это статическое, поэтому я мог бы теоретически просто вызвать DatabaseFactory.GetDatabaseTable(), это вызовет утечку памяти, не так ли?

--------- Редактировать ------- Возможно, мне нужно добавить немного подробнее. Если бы я был выше код вроде этого: -

public static class DatabaseFactory 
{ 
    private static string dbConn get { return <gets from config file>; } 

    public static IDatabaseTableObject GetDatabaseTable() 
    { 
     IDatabaseTableObject databaseTableObject = new SQLDatabaseObject(dbConn); 
     return databaseTableObject; 
    } 
} 

то вместо моего кода контроллера говоря

DatabaseFactory databaseFactory = new DatabaseFactory(); 
var tableObject = databaseFactory.GetDatabaseTable(); 
List<DbRecord> records = tableObject.Table.ToList(); 

Я просто сказал

var tableObject = DatabaseFactory.GetDatabaseTable(); 
List<DbRecord> records = tableObject.Table.ToList(); 

бы не то, что результат в БД соединение остается открытым после того, как метод действия контроллера был GCed?

+0

Я не вижу ничего «статического». – SLaks

ответ

1

Поскольку вы не храните объект в любом месте, это не утечка памяти.

+0

Не так ли? Я думал, что если бы я вызвал это из действия контроллера в его статической форме, поскольку не было объекта DatabaseFactory, созданного и, следовательно, назначенного для сбора мусора, возвращаемый объект базы данныхTableObject никогда не закрывался, поскольку статический объект никогда не собирал мусор? – user364685

+0

Я не вижу, как вы храните объект где угодно. Тот факт, что объект был возвращен статическим методом, является _completely_ нерелевантным. – SLaks

+0

Хммм, я думал, что если вы создавали экземпляр объекта подключения к базе данных в статическом объекте, передавали его обратно вызывающему методу и использовали его в вызывающем методе, когда вызывающий метод был GCed, он не был бы GC-объектом соединения с базой данных был «неподвижен», на который ссылается статический объект. И поскольку метод статического объекта будет GCed после его завершения, поскольку он возвращал объект соединения DB, который бы не GC его. Конечно, я где-то нашел статью, которую хотел проверить, я понял (но это было так, в двух словах) - я посмотрю, смогу ли я снова ее найти. Thx – user364685

Смежные вопросы