Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как закрыть коннекшин автоматически? / 25 сообщений из 46, страница 1 из 2
12.08.2015, 22:39
    #39028195
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Вот в MVC есть контроллер. И при вызове метода GetProjectCompletionList коннекшин будет закрыт автоматически даже без вызова Dispose(). Он сам вызовется неявно.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Threading.Tasks;
using System.Data;
using System.Data.Entity;
using FWC.Models;

namespace FWC.Controllers
{

    public class CalendarController : Controller
    {
        private FieldCalendarProdEntities db = new FieldCalendarProdEntities();
        /// <summary>
        /// GetProjectCompletionList
        /// </summary>
        /// <param name="prefixText"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public async Task<ActionResult> GetProjectCompletionList(string prefixText, int count)
        {
            //Get student name of string type
            //var studentName = db.Database.SqlQuery<RQ>("Select ProjectID, ClientName from WorkRequests").ToList();

            var pr = await db.WorkRequests.Where(w => w.ProjectID.Contains(prefixText) && (w.CurStatus == "Open" || w.CurStatus == "In Progress")).Select(p => new { p.ProjectID }).Distinct().OrderBy(w => w.ProjectID).ToListAsync();
            List<string> arr = new List<string>();
            foreach (var p in pr)
            {
                arr.Add(p.ProjectID);
            }
            JsonDataEx data = new JsonDataEx { d = arr };
            return Json(data);
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }

    }
}


Делаю свой класс с IDisposable. И метод Dispose() не вызывается неявно, когда объект выходит из области видимости, а только при закрытии приложения. Почему так?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    class MyClass : IDisposable
    {
        //The managed resource handle

        public MyClass(string path)
        {
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (disposing == true)
            {
                MessageBox.Show("close");
            }
        }

        ~MyClass()
        {
            Dispose(false);
        }
    }
}

...
Рейтинг: 0 / 0
12.08.2015, 22:46
    #39028198
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Вот чувак утверждает, что должно закрываться автоматом. Но это не так.

авторWith the above class implementing IDisposable, the connection will always be closed no matter how the user will use this class. This way no open connections will be left.

http://www.codeproject.com/Articles/442069/ASP-NET-How-To-Use-Open-Close-Connections-Correctl
...
Рейтинг: 0 / 0
12.08.2015, 22:46
    #39028199
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Relic Hunter,

ничё не понял. ты про dispose паттерн вообще читал? про using {} ??
...
Рейтинг: 0 / 0
12.08.2015, 22:47
    #39028200
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Relic Hunterкогда объект выходит из области видимости

область видимости это в C++ и называется RAII, в C# не действует область видимости. только область using.
...
Рейтинг: 0 / 0
12.08.2015, 22:48
    #39028202
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Relic Hunter http://www.codeproject.com/Articles/442069/ASP-NET-How-To-Use-Open-Close-Connections-Correctl

дебильная статья, отвратительное уродское решение.

лучше заюзай Autofac, он это делает за тебя, а ты куришь бамбук и ни о чём не парешься, ни о паттернах никаких, говнокодишь себе потихонечку, а Autofac подчищает.
...
Рейтинг: 0 / 0
12.08.2015, 22:54
    #39028207
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
hVosttRelic Hunter,

ничё не понял. ты про dispose паттерн вообще читал? про using {} ??А без "using" нельзя? У меня часть проектов на VB.NET. Там "using" нет.
...
Рейтинг: 0 / 0
12.08.2015, 23:21
    #39028211
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Relic HunterА без "using" нельзя? У меня часть проектов на VB.NET. Там "using" нет.

нельзя

есть

https://msdn.microsoft.com/ru-ru/library/htd05whh(v=vs.120).aspx

без using смысл IDisposable несколько меркнет, и почти теряется, если не использовать внешнее управление циклом жизнидеятельности объектов, например, DI.
...
Рейтинг: 0 / 0
12.08.2015, 23:44
    #39028217
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Relic Hunter,
Больше хороших статей от индусов читайте! И ракеты полетят вниз, а не вверх
...
Рейтинг: 0 / 0
12.08.2015, 23:45
    #39028218
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Relic HunterhVosttRelic Hunter,

ничё не понял. ты про dispose паттерн вообще читал? про using {} ??А без "using" нельзя? У меня часть проектов на VB.NET. Там "using" нет.
Нельзяю C# не есть C++.
...
Рейтинг: 0 / 0
12.08.2015, 23:46
    #39028219
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
hVostt,

Почему в MVC контроллере вызов метода автоматически гарантирует вызов Dispose() и освобождение контекста?
...
Рейтинг: 0 / 0
12.08.2015, 23:46
    #39028220
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Relic HunterhVostt,

Почему в MVC контроллере вызов метода автоматически гарантирует вызов Dispose() и освобождение контекста?
???
...
Рейтинг: 0 / 0
12.08.2015, 23:48
    #39028222
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Relic Hunter,
Автоматически гарантирует вызов Dispose только выражение using или прямой вызов метода.
...
Рейтинг: 0 / 0
13.08.2015, 00:00
    #39028225
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
AxeleronRelic Hunter,
Автоматически гарантирует вызов Dispose только выражение using или прямой вызов метода.Это я понял. Просто бытовало мнение, если уж я реализую IDisposable, то Dispose() вызовется по-любому, с юзинг без юзинг, по-барабану... Жаль.
...
Рейтинг: 0 / 0
13.08.2015, 00:26
    #39028228
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Relic HunterAxeleronRelic Hunter,
Автоматически гарантирует вызов Dispose только выражение using или прямой вызов метода.Это я понял. Просто бытовало мнение, если уж я реализую IDisposable, то Dispose() вызовется по-любому, с юзинг без юзинг, по-барабану... Жаль.
Нет, только через using. IDisposable расширяет возможности класса, но не гарантирует
...
Рейтинг: 0 / 0
13.08.2015, 14:27
    #39028686
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
AxeleronНет, только через using. IDisposable расширяет возможности класса, но не гарантирует
Можно еще вызвать явно :)
...
Рейтинг: 0 / 0
13.08.2015, 14:29
    #39028689
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
ЕвгенийВAxeleronНет, только через using. IDisposable расширяет возможности класса, но не гарантирует
Можно еще вызвать явно :)
Да, но не автоматом. Если не используется using, то Dispose метод автоматом не будет вызван.
...
Рейтинг: 0 / 0
13.08.2015, 15:31
    #39028769
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Dispose служит для освобождения захваченных ресурсов, он гарантирует что ресурсы будут освобождены при уборке мусора
за счет перекрытия финализатора объекта, но неопределенно когда, ( защита от дурака)
Можно сподобиться заботой о своем приложении и вызывать диспозе через конструкцию using, впрочем в области транс акции
он служит совсем не для этого, то что using гарантирует вызов диспозе, банальное заблуждение, когда вы вырастите большие
то поймете, что это в некоторых случаях совсем не так.
...
Рейтинг: 0 / 0
13.08.2015, 15:35
    #39028776
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Где-то в степито что using гарантирует вызов диспозе, банальное заблуждение
Гарантирует. MSDN
Пора подтягивать основы :)
...
Рейтинг: 0 / 0
13.08.2015, 15:38
    #39028785
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Axeleron,
гыггы, а если нет, и я прав..
...
Рейтинг: 0 / 0
13.08.2015, 15:40
    #39028792
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Где-то в степи,
MSDN (Remarks)The using statement ensures that Dispose is called even if an exception occurs while you are calling methods on the object.
...
Рейтинг: 0 / 0
13.08.2015, 15:41
    #39028797
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
И никаких если :)
...
Рейтинг: 0 / 0
13.08.2015, 15:45
    #39028808
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Axeleron,
гыгы.. хотите кода? там всего 8 -10 строчек( пару лет назад выкладывал его сюда), подумаю, отдам мсу на сайт в мемориз
...
Рейтинг: 0 / 0
13.08.2015, 15:46
    #39028815
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Где-то в степи,
Ну? :)
...
Рейтинг: 0 / 0
13.08.2015, 15:48
    #39028825
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Что интересно, в MVC using используется штатно вообще "не по назначению" в Razor. В using оборачивается запись формы штатным хелпером в выходной поток. Конструктор пишет в поток заголовок, внутри using пользователь пишет любой свой код, в Dispose штатный класс пишет в выходной поток "подвал" формы. Так что хелпер рассчитывает на гарантированный вызов Dispose по окончании конструкции using ))
...
Рейтинг: 0 / 0
13.08.2015, 18:07
    #39028975
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть коннекшин автоматически?
Где-то в степиAxeleron,
гыгы.. хотите кода? там всего 8 -10 строчек( пару лет назад выкладывал его сюда), подумаю, отдам мсу на сайт в мемориз

давай )) как сломать всегда интересно
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как закрыть коннекшин автоматически? / 25 сообщений из 46, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]