powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как закрыть коннекшин автоматически?
25 сообщений из 46, страница 1 из 2
Как закрыть коннекшин автоматически?
    #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
Как закрыть коннекшин автоматически?
    #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
Как закрыть коннекшин автоматически?
    #39028199
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter,

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

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

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

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

ничё не понял. ты про dispose паттерн вообще читал? про using {} ??А без "using" нельзя? У меня часть проектов на VB.NET. Там "using" нет.
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #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
Как закрыть коннекшин автоматически?
    #39028217
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter,
Больше хороших статей от индусов читайте! И ракеты полетят вниз, а не вверх
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028218
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterhVosttRelic Hunter,

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

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

Почему в MVC контроллере вызов метода автоматически гарантирует вызов Dispose() и освобождение контекста?
???
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028222
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter,
Автоматически гарантирует вызов Dispose только выражение using или прямой вызов метода.
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028225
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronRelic Hunter,
Автоматически гарантирует вызов Dispose только выражение using или прямой вызов метода.Это я понял. Просто бытовало мнение, если уж я реализую IDisposable, то Dispose() вызовется по-любому, с юзинг без юзинг, по-барабану... Жаль.
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028228
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterAxeleronRelic Hunter,
Автоматически гарантирует вызов Dispose только выражение using или прямой вызов метода.Это я понял. Просто бытовало мнение, если уж я реализую IDisposable, то Dispose() вызовется по-любому, с юзинг без юзинг, по-барабану... Жаль.
Нет, только через using. IDisposable расширяет возможности класса, но не гарантирует
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028686
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronНет, только через using. IDisposable расширяет возможности класса, но не гарантирует
Можно еще вызвать явно :)
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028689
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВAxeleronНет, только через using. IDisposable расширяет возможности класса, но не гарантирует
Можно еще вызвать явно :)
Да, но не автоматом. Если не используется using, то Dispose метод автоматом не будет вызван.
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028769
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dispose служит для освобождения захваченных ресурсов, он гарантирует что ресурсы будут освобождены при уборке мусора
за счет перекрытия финализатора объекта, но неопределенно когда, ( защита от дурака)
Можно сподобиться заботой о своем приложении и вызывать диспозе через конструкцию using, впрочем в области транс акции
он служит совсем не для этого, то что using гарантирует вызов диспозе, банальное заблуждение, когда вы вырастите большие
то поймете, что это в некоторых случаях совсем не так.
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028776
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степито что using гарантирует вызов диспозе, банальное заблуждение
Гарантирует. MSDN
Пора подтягивать основы :)
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028785
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,
гыггы, а если нет, и я прав..
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #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
Как закрыть коннекшин автоматически?
    #39028797
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И никаких если :)
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028808
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,
гыгы.. хотите кода? там всего 8 -10 строчек( пару лет назад выкладывал его сюда), подумаю, отдам мсу на сайт в мемориз
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028815
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,
Ну? :)
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028825
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что интересно, в MVC using используется штатно вообще "не по назначению" в Razor. В using оборачивается запись формы штатным хелпером в выходной поток. Конструктор пишет в поток заголовок, внутри using пользователь пишет любой свой код, в Dispose штатный класс пишет в выходной поток "подвал" формы. Так что хелпер рассчитывает на гарантированный вызов Dispose по окончании конструкции using ))
...
Рейтинг: 0 / 0
Как закрыть коннекшин автоматически?
    #39028975
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиAxeleron,
гыгы.. хотите кода? там всего 8 -10 строчек( пару лет назад выкладывал его сюда), подумаю, отдам мсу на сайт в мемориз

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


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