Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Когда создавать оъекты? Как они в ведут себя в памяти? 
:(
    Опции темы
headzero
Дата 12.3.2008, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 14.11.2006

Репутация: нет
Всего: 1



Вопрос такой. Допустим есть форма и грид, куда считывать данные из базы. Для этого нужно создавать два обьекта датаАдаптер и датасет. Где их правильей всего создавать: 
1) Обявлять и Создавать как поля класса
2) Обьявлять как поля класса, а потом создавать в вызывающем методе, который заполняет?
3) Создавать ннепосредственно в методе.
Как про этом они будут вести себя в памяти? Как я понимаю, если создавать как поля класса, они будут в памяти все время существования класса, а если в методе, то они уничтожаться после выхода из медота.

Вопрос не конкретно про базы данных, а интересует компетентная точка зрения на проблему в целом: когда и как правельней создавать обекты в памяти  Спасибо. Буду рад комментариям.Извеняюсь за неточности в терминологии)

P.S Для примера мой код
Код

sing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsApplication5
{
    public partial class Edit : Form
    {
        private DBConnector cforEdit = new DBConnector();     // Обьявлять сдесь?
        private OleDbDataAdapter oleDBforEdit;                       //   Обьявлять сдесь?
        private DataSet dsforEdit;                                             //   Обьявлять сдесь?
        public Edit()
        {
            InitializeComponent();
            FillInEditForm();
        }

        private void FillInEditForm()                         // грид пока не заполняю, не в этом вопрос)
        {
            string SQLstr = "SELECT * FROM TOV";
            
            oleDBforEdit = new OleDbDataAdapter(SQLstr,cforEdit.connectionString);  //   Или сдесь?
            dsforEdit = new DataSet();                                                                           //   Или сдесь?
            oleDBforEdit.Fill(dsforEdit);
        }

    }
}



--------------------
Воображение важнее знания
                                                     (Алберт Эйнштейн)
PM MAIL   Вверх
Dblma
Дата 13.3.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 6.11.2007
Где: Moscow

Репутация: нет
Всего: 1



В любом варианте нельзя точно сказать, когда именно уничтожится  объект из кучи (любой, не только DBConnector). Этом решает Сборщик мусора (GC). В любом случае, не ранее, чем GC не сможет составить путь в графе ссылок к объекту. Т.е. если сделать DBConnector членом класса, то он уничтожится не ранее, чем мы потеряем ссылку на объект класса, в котором он содержится. А если DBConnector создавать внутри метода - то ссылка (как локальная переменная) потеряется при выходе из метода.

Где и как держать объект DBConnector (и др.) - зависит от того, как этот объект будет использоваться. Если постоянно - то создаём член класса (возможно даже статический). Если DBConnector (и др.) нужен всего 1 раз, то лучше создавать локально внутри метода и внутри директивы using. Вот так:
 
Код

private void FillInEditForm() 
{
      using(DBConnector cforEdit = new DBConnector())
      {
            // ..... 
      }
}

Это гарантирует, что при выходе из блока using вызовется Dispose для cforEdit (что, в общем, не освободит память этого объекта, а только закроет соединение и освободит все ресурсы).


Это сообщение отредактировал(а) Dblma - 13.3.2008, 10:27
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0417 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.