Загрузка форм в память

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Загрузка форм в память

Сообщение Денис » 22.01.2010 (Пт) 9:35

AlekseyVB писал(а):А объясните недалекому простым языком чем в действие отличается?


В первом случае происходит неявное создание экземпляра класса, одноименного классу. Уничтожения его не происходит в некоторых случаях. От этого получаются проблемы с висением процесса в диспетчере задач после закрытия (как в соседнем топике).

Вообще, если программист знает о неявном создании класса и прочих иных неявных действиях языка - это не страшно. Страшно, когда программист не знает об этом и штампует аццкие поделия, крошащие систему. Да еще и хацкером себя мнит. (это не о тебе, это просто пример)
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

AlekseyVB
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 10.04.2009 (Пт) 18:47

Re: Загрузка форм в память

Сообщение AlekseyVB » 22.01.2010 (Пт) 11:13

В первом случае происходит неявное создание экземпляра класса, одноименного классу.

Это случается только с формами? С элементами управления такого не случается?

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Загрузка форм в память

Сообщение MIT » 22.01.2010 (Пт) 11:25

Идиотский топик...
Ты, вот, можешь внятно сказать, что ты хочешь сделать?

Если ты напишешь Form2.Show, то при первом обращении к форме фреймворк создаст одноименный экземпляр соответсвующего класса, с которым ты и сможешь работать.
От кода Dim frm2 as New Form2 предыдущий отличается тем, что... В первом случае ты какбэ не знаешь что существует экзепляр класса формы, а во втором знаешь. Даже не так. В первом случае ты не знаешь где объявлена переменная (хотя я и показал где она находится несколькими постами выше), а во втором знаешь.

Все конртролы создаются в процедуре InitializeComponent, которая есть у каждой формы, созданной в дизайнере форм.

А вообще странно. В начале темы я говорил про A, ANDLL про B. После нескольких постов тут и продолжения разговора в аське получилось так, что я понял возможность B, а он решил, что A все-таки лучше.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Загрузка форм в память

Сообщение ANDLL » 22.01.2010 (Пт) 11:30

Угу, забавно получилось.
Учитывая что на фоне еще товарищ нес всякую херь про
Вообще, если программист знает о неявном создании класса и прочих иных неявных действиях языка - это не страшно
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Загрузка форм в память

Сообщение MIT » 22.01.2010 (Пт) 11:46

А я наверно понял о чем речь идет.
О том, что на создание формы может уйти время, если в процедуре New это формы написаны тонны ненужного кода.

Если так, то когда ты напишешь Form2.Show, то при первом обращении к форме фреймворк создаст одноименный экземпляр соответсвующего класса, с которым ты и сможешь работать и именно в момент первого обращения к форме выполнится код из процедуры New формы.

Если ты напишешь Dim frm2 as New Form2, то код из процедуры New формы выполнится тогда, когда ты создаешь экземпляр (т.е. например во время отображение сплеша), а обращение типа frm2.Show, будет произведено уже быстрее первого варианта.

НО! Это не относится к коду, написанному в обработчике события загрузки формы (Form_Load).
НО! Разница будет только если в код написан в процедуре New формы.

Однако и в первом случае можно перенести выполнение процедуры создания формы в любое место, достаточно лишь заранее обратиться каким-нибудь образом к форме, например задать текст заголовка.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

AlekseyVB
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 10.04.2009 (Пт) 18:47

Re: Загрузка форм в память

Сообщение AlekseyVB » 22.01.2010 (Пт) 12:56

Идиотский топик...
Ты, вот, можешь внятно сказать, что ты хочешь сделать?


Разрабатывается приложение, которое работает со многими файлами Ексел. Разные формы общаются с разными файлами Ексел, происходит чтение, запись в файлы. Вообщем файлы я использую как файлы базы данных, по которым формируются отчеты. (Может Ексел файлы не следует использовать как файлы базы данных, но пока так) Так вот, формирование некоторых отчетов заложено в событии Load формы, таким образом при переходе к данной форме происходит загрузка данных и появляется задержка. Я хочу что бы эти отчеты грузились вначале запуска программы, когда появляется заставочная форма. Конечно есть другие выходы из этой ситуации, просто я хотел сделать это как я делал в ВБ6...

Кроме того, пример про игру, который я приводил, ничего не объясняет или я что-то недопонимаю?
Слышал о какой-то игре что в ней не происходит прогрузки (Loading...) при переходе персонажем из одной локации в другую))) так как все локации загружаются в начале запуска игры. Хочу осуществить такое же)))

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Загрузка форм в память

Сообщение MIT » 22.01.2010 (Пт) 13:02

Игры тут совсем-совсем нипричем. Там другие задачи, другие способы реализации.

Короче говоря (опуская оценку корректности указанных тобой шагов в реализации программы) делай так: засовывай загрузку не в обработчик события Load формы, а в процедуру New этой формы, затем при запуске программы в коде главной формы делай frm2 = New Form2 - именно в этот момент и выполнится твой код загрузки дополнительных форм. Предполагается что переменная frm2 будет объявлена глобальной или на уровне класса главной формы.

А вообще структура работы программы у тебя кривая какая-то...
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Загрузка форм в память

Сообщение Dmitriy2003 » 22.01.2010 (Пт) 13:08

MIT писал(а):засовывай загрузку не в обработчик события Load формы, а в процедуру New этой формы,

Вот так точно делать не надо,
MIT писал(а):А вообще структура работы программы у тебя кривая какая-то...

А вот это правда.

Покажеш время задержки, и кусок кода вызывающий ее :?:

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Загрузка форм в память

Сообщение MIT » 22.01.2010 (Пт) 13:42

Dmitriy2003 писал(а):Вот так точно делать не надо
Почему? Аргументируй.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

AlekseyVB
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 10.04.2009 (Пт) 18:47

Re: Загрузка форм в память

Сообщение AlekseyVB » 22.01.2010 (Пт) 13:44

А вообще структура работы программы у тебя кривая какая-то...

Ну да, я хочу переделать всё и хранить данные в файлах *.txt. Данных планируется быть много. Подойдут мне *.txt файлы? Пробывал как-то работать с *.mdf, но что-то не получалось и я забил))

Покажеш время задержки, и кусок кода вызывающий ее

Домой приду кусок покажу. А как "показать время задержки" :)? Время маленькое, пару секунд, но данных мало там и если предположить что данных будет много то соответственно дольше будет.
Последний раз редактировалось AlekseyVB 25.01.2010 (Пн) 12:29, всего редактировалось 1 раз.

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Загрузка форм в память

Сообщение Dmitriy2003 » 22.01.2010 (Пт) 13:46

MIT писал(а):Почему? Аргументируй.

По многим причинам, но торопиться не надо - давай сначало посмотрим что-же реально делает - AlekseyVB...

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Загрузка форм в память

Сообщение MIT » 22.01.2010 (Пт) 13:52

AlekseyVB писал(а):Подойдут мне *.txt файлы? Пробывал как-то работать с *.mdf, но что-то не получалось и я забил))
Ну тогда бы уж хотя бы XML... Но если данных много, то лучше все-таки использовать базы данных, а не все что попадется под руку.

Dmitriy2003 писал(а):По многим причинам
Парочку хотя бы назови.
Dmitriy2003 писал(а):но торопиться не надо - давай сначало посмотрим что-же реально делает
Не-не-не, ты абсолютно уверенно, без всяких примеров заявил, что так делать не надо. Почему? Расскажи, пожалуйста, интересно ведь :)
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Загрузка форм в память

Сообщение Dmitriy2003 » 22.01.2010 (Пт) 13:53

AlekseyVB писал(а):А вообще ВБ я только по книжкам пытаюсь изучать и образование у меня экономическое))) по курсу которого не было даже основ программирования, следствием чего может являться неправильное составление структуры приложения.

Поэтому нам и необходимо понять что же ты реально там написал.
AlekseyVB писал(а):Время маленькое, пару секунд,

:D Показывай код - думаю хуже от этого не будет - авось коллективный разум победит

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Загрузка форм в память

Сообщение Dmitriy2003 » 22.01.2010 (Пт) 13:57

MIT писал(а):Не-не-не, ты абсолютно уверенно, без всяких примеров заявил, что так делать не надо. Почему? Расскажи, пожалуйста, интересно ведь :)

По-моему ты отвлекаешся от контекста - здесь речь не идет о том что в конструкторе не нужно вызывать конструкторы других классов,
применительно к посту - этого делать ненужно - ответ ты дал сам...
MIT писал(а):А вообще структура работы программы у тебя кривая какая-то...

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Загрузка форм в память

Сообщение MIT » 22.01.2010 (Пт) 14:01

Слив засчитан
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Загрузка форм в память

Сообщение Денис » 22.01.2010 (Пт) 22:20

Dmitriy2003 писал(а):
MIT писал(а):Почему? Аргументируй.

По многим причинам, но торопиться не надо - давай сначало посмотрим что-же реально делает - AlekseyVB...


Он игру делает, типа квеста. Каждая форма это локация. Он хочет чтобы все формы-локации сразу грузились в память при запуске. Если я правильно понимаю.

Безотносительно всего вышеописанного, я не понимаю, зачем делать несколько одинаковых классов-форм, когда можно сделать один класс и грузить в него ресурсы, хоть сразу, хоть по необходимости.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Загрузка форм в память

Сообщение 1Steps » 23.01.2010 (Сб) 5:22

Я так и не понял о чем топик.

Если тебе надо загрузить форму заранее и инициализировать(именно инициализировать) свойства формы, то используй Sub New(...).
Если тебе надо изменить свойства формы, используй Form_Load(...)

Допустим, у тебя есть 100 форм.
Код: Выделить всё
Module PublicVariables
    Public f1 As New Form1
    Public f2 As New Form2
    Public f3 As New Form3
    Public f4 As New Form4
    'и т.д.
End Module


Далее
Код: Выделить всё
    Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If f1 Is Nothing Then
            f1 = New Form1
            f1.Свойство = "новое свойство"
        Else
            f1.Свойство = "новое свойство"
        End If
    End Sub

Свойства для своей формы, ты можешь сам создать.
По большому счету, ты можешь оперировать всего лишь одной формой.
А вообще, алгоритм в корне не правильный. :D
Слушай что люди говорят.
Удалена за ненадобностью.

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Загрузка форм в память

Сообщение Dmitriy2003 » 23.01.2010 (Сб) 5:32

Денис писал(а):Он игру делает, типа квеста. Каждая форма это локация. Он хочет чтобы все формы-локации сразу грузились в память при запуске. Если я правильно понимаю.


AlekseyVB писал(а):Разрабатывается приложение, которое работает со многими файлами Ексел. Разные формы общаются с разными файлами Ексел, происходит чтение, запись в файлы. Вообщем файлы я использую как файлы базы данных, по которым формируются отчеты. (Может Ексел файлы не следует использовать как файлы базы данных, но пока так) Так вот, формирование некоторых отчетов заложено в событии Load формы, таким образом при переходе к данной форме происходит загрузка данных и появляется задержка. Я хочу что бы эти отчеты грузились вначале запуска программы, когда появляется заставочная форма. Конечно есть другие выходы из этой ситуации, просто я хотел сделать это как я делал в ВБ6...


Денис писал(а):я не понимаю, зачем делать несколько одинаковых классов-форм

Кто их делает :?:

AlekseyVB
Присмотрись к вложениям (Переписать на vb не так уж и сложно), код не главное - главное прынцып - если выбереш правильный - то программа будет работать корректно, и без всяких фокусов покусов.
Вложения
biblio.v1.rar
C#-VS2008-NET.2.0
(351.65 Кб) Скачиваний: 76
biblio.v2.rar
C#-VS2008-NET.2.0
(364.87 Кб) Скачиваний: 78

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Загрузка форм в память

Сообщение Денис » 23.01.2010 (Сб) 12:33

Dmitriy2003 писал(а):

Та да, мой косяк. Это он пример с играми приводил, да.

А насчет форм... В топике уже всё сказали: Пусть автор делает загрузку таблиц в процедуре New и при объявлении нового экземпляра будет выполняться так желаемая им подгрузка данных.

Единственное, что хотелось бы узнать, бывает ли перегрузка процедуры New своими параметрами? Чтобы при объявлении экземпляра можно было задавать ему в качестве параметра рабочую таблицу. К сожалению, студии нет под рукой сейчас, чтоб проверить.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Загрузка форм в память

Сообщение Dmitriy2003 » 23.01.2010 (Сб) 12:41

Денис писал(а):Единственное, что хотелось бы узнать, бывает ли перегрузка процедуры New своими параметрами? Чтобы при объявлении экземпляра можно было задавать ему в качестве параметра рабочую таблицу. К сожалению, студии нет под рукой сейчас, чтоб проверить.

Да. :)
з.ы.(смотри вожения- и без студии в блокноте тоже можно...)

Пред.

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 73

    TopList