Гуру, поделитесь опытом!
Есть проект и есть некоторое количество редко-изменяемых справочников (напр. должности, типы документов и т.д.), которые периодически нужны для заполнения списков в разных местах приложения. Сами справочники, конечно, хранятся на SQL Server. Думется, их надо раз загрузить (или подгружать по мере надобности) в, скажем, DataSet и пользовать отовсюду.
Вопрос: где хранить этот набор данных? В отдельном классе как статическую переменнуюи и доступ к ней через статические функции? Как это скажется на быстродействии? Или есть другие наработки решения такой штатной ситуации?
Re: Как и где хранить данные справочников? Нужен совет...
Здравствуйте, VKab, Вы писали:
VK>Гуру, поделитесь опытом! VK>Есть проект и есть некоторое количество редко-изменяемых справочников (напр. должности, типы документов и т.д.), которые периодически нужны для заполнения списков в разных местах приложения. Сами справочники, конечно, хранятся на SQL Server. Думется, их надо раз загрузить (или подгружать по мере надобности) в, скажем, DataSet и пользовать отовсюду.
VK>Вопрос: где хранить этот набор данных? В отдельном классе как статическую переменнуюи и доступ к ней через статические функции? Как это скажется на быстродействии? Или есть другие наработки решения такой штатной ситуации?
Сам бы я так и сделал. А из-за чего там может быть проблема с производительностью?
Re[2]: Как и где хранить данные справочников? Нужен совет...
Здравствуйте, anton_t, Вы писали:
VK>>Есть проект и есть некоторое количество редко-изменяемых справочников (напр. должности, типы документов и т.д.), которые периодически нужны для заполнения списков в разных местах приложения. Сами справочники, конечно, хранятся на SQL Server. Думется, их надо раз загрузить (или подгружать по мере надобности) в, скажем, DataSet и пользовать отовсюду.
VK>>Вопрос: где хранить этот набор данных? В отдельном классе как статическую переменнуюи и доступ к ней через статические функции? Как это скажется на быстродействии? Или есть другие наработки решения такой штатной ситуации?
_>Сам бы я так и сделал. А из-за чего там может быть проблема с производительностью?
Доступ к статическим переменным происходит медленнее, но при небольшом объеме тоже не думаю, что будет критично.
Сам сделал также, но решил уточнить у сообщества.
Спасибо
Re[3]: Как и где хранить данные справочников? Нужен совет...
Здравствуйте, TK, Вы писали:
TK>Hello, "Oyster"
>> VK>Доступ к статическим переменным происходит медленнее, >> Бред >>
TK>А если подумать?
Раз ты ответил, то, видимо, я ошибаюсь. Но всё равно не вижу, почему доступ к статической переменной int x будет происходить медленнее, чем к переменной экземпляра класса int y.
Re[4]: Как и где хранить данные справочников? Нужен совет...
Hello, "_FRED_" > > VK>Доступ к статическим переменным происходит медленнее > ... Почему?
Такое бывает в случаях, когда .net разделяет генерируемый jit-ом код между
несколькими доменами. В такой ситуации общий код не может напрямую работать
со статической переменной (доменов несколько и переменных => несколько).
поэтому, используется дополнительная косвенность при обращении к static
переменной.
конечно, можно код между доменами не разделять. тогда, никаких проблем не
будет...
Posted via RSDN NNTP Server 1.9
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[5]: Как и где хранить данные справочников? Нужен совет...
Здравствуйте, TK, Вы писали:
>> VK>Доступ к статическим переменным происходит медленнее >> ... Почему?
TK>Такое бывает в случаях, когда .net разделяет генерируемый jit-ом код между TK>несколькими доменами. В такой ситуации общий код не может напрямую работать TK>со статической переменной (доменов несколько и переменных => несколько).
Но внутри одного домена по-прежнему всё будет "хоккей"?
TK>поэтому, используется дополнительная косвенность при обращении к static TK>переменной.
На сколько это дорого?
under «*none*»,
... << RSDN@Home 1.1.4 beta 7 rev. 462>>
Help will always be given at Hogwarts to those who ask for it.
Re[6]: Как и где хранить данные справочников? Нужен совет...
The runtime supports a lightweight process-like environment called an AppDomain. Each AppDomain has its own copy of all static variables. Because of this, any domain nuetral code must use 5-10 instructions to access static fields of just 1. The JIT can optimize many cases (allowing one fetch of AppDomain variables to serve many static field fetches in the same method), but there are cases when no optimization can be done. Domain Nuetral code is more common in Whidbey. Static field access overhead is actually worse than write barriers in the worst case: the static field access goes from one cycle to roughly ten cycles. However because the overhead of field fetches can be combined (and pulled out of loops) the impact of slower field fetch is generally less than that of write barriers. It has no measurable impact at all in many scenarios (for instance the framework code tends to not use static much).
RE: Re: Как и где хранить данные справочников? Нужен совет..
От:
Аноним
Дата:
07.06.05 11:01
Оценка:
Можно и так... Быстрее будет, если заюзаешь Cache ...
Во втором фреймверке у меня вообще динамически генерятся енумы, которые содержат все необходимые данные
И немедленно выпил ...
VK>>Вопрос: где хранить этот набор данных? В отдельном классе как статическую переменнуюи и доступ к ней через статические функции? Как это скажется на быстродействии? Или есть другие наработки решения такой штатной ситуации?
_>Сам бы я так и сделал. А из-за чего там может быть проблема с производительностью?
"Вернемся к баранам" Остались непонятки...
Создаем класс со статическими переменными. Как теперь организовать использование этих переменных изнутри UserControls? Ведь на этапе проектирования контролов эти переменные еще не существуют. Такое вообще возможно? Через внешние свойства контролов?
Re[3]: Как и где хранить данные справочников? Нужен совет...
Здравствуйте, VKab, Вы писали:
VK>>>Вопрос: где хранить этот набор данных? В отдельном классе как статическую переменнуюи и доступ к ней через статические функции? Как это скажется на быстродействии? Или есть другие наработки решения такой штатной ситуации?
_>>Сам бы я так и сделал. А из-за чего там может быть проблема с производительностью?
VK>"Вернемся к баранам" Остались непонятки... VK>Создаем класс со статическими переменными. Как теперь организовать использование этих переменных изнутри UserControls? Ведь на этапе проектирования контролов эти переменные еще не существуют. Такое вообще возможно? Через внешние свойства контролов?
В дизайн-тайме, например из TypeConverter'а, вполне реально получить доступ к статическим свойствам других типов (например, есть же доступ к переменныем перечислений). Вот если значение статического свойства надо передать в аттрибут, то нельзя, но их можно проставить в момент инициализации, например в конструкторе UserControl.
under «*none*»,
... << RSDN@Home 1.1.4 beta 7 rev. 462>>
Help will always be given at Hogwarts to those who ask for it.
Re[4]: Как и где хранить данные справочников? Нужен совет...
VK>>"Вернемся к баранам" Остались непонятки... VK>>Создаем класс со статическими переменными. Как теперь организовать использование этих переменных изнутри UserControls? Ведь на этапе проектирования контролов эти переменные еще не существуют. Такое вообще возможно? Через внешние свойства контролов?
_FR>В дизайн-тайме, например из TypeConverter'а, вполне реально получить доступ к статическим свойствам других типов (например, есть же доступ к переменныем перечислений). Вот если значение статического свойства надо передать в аттрибут, то нельзя, но их можно проставить в момент инициализации, например в конструкторе UserControl.
_FRED_
Чуток подробнее можно? А то опыта только набираюсь...
Спасибо
Re[5]: Как и где хранить данные справочников? Нужен совет...
Здравствуйте, VKab, Вы писали:
VK>>>"Вернемся к баранам" Остались непонятки... VK>>>Создаем класс со статическими переменными. Как теперь организовать использование этих переменных изнутри UserControls? Ведь на этапе проектирования контролов эти переменные еще не существуют. Такое вообще возможно? Через внешние свойства контролов?
_FR>>В дизайн-тайме, например из TypeConverter'а, вполне реально получить доступ к статическим свойствам других типов (например, есть же доступ к переменныем перечислений). Вот если значение статического свойства надо передать в аттрибут, то нельзя, но их можно проставить в момент инициализации, например в конструкторе UserControl.
VK>_FRED_ VK>Чуток подробнее можно? А то опыта только набираюсь...
Не совсем я пока понимаю, что именно требуется, но попробую так:
using System;
namespace WindowsApplication1
{
#region Using directives
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Windows.Forms;
#endregion Using directives
//Здесь хранятся статические данныеpublic class DataStore
{
private DataStore() {
}
public static DataSet MyDataSet;
// Заполняем статические данныеstatic DataStore() {
MyDataSet = new DataSet();
using(SqlDataAdapter adapter = new SqlDataAdapter()) {
using(SqlConnection connection = new SqlConnection("Server=ServerName; Database=DatabaseName; User ID=sa; Password=;")) {
using(SqlCommand command = new SqlCommand("SELECT * FROM A; SELECT * FROM B;", connection)) {
adapter.SelectCommand = command;
adapter.TableMappings.Add("Table", "A");
adapter.TableMappings.Add("Table1", "B");
adapter.Fill(MyDataSet);
}//using
}//using
}//using
}
}
// А здесь будем ихз использоватьpublic class MyComponent : UserControl
{
public MyComponent() {
view = new DataGrid();
view.Dock = DockStyle.Fill;
Controls.Add(view);
}
protected override void OnLoad(EventArgs e) {
try {
if(DesignMode) { // "...Используем статические переменные..." "...этапе проектирования..."
view.DataSource = DataStore.MyDataSet;
view.DataMember = "A";
}//if
} finally {
base.OnLoad(e);
}//try
}
private DataGrid view;
}
}
Если положить такой компонент на форму, то в дизайн-тайме он покажет содержимое таблицы "А".
under «*none*»,
... << RSDN@Home 1.1.4 beta 7 rev. 462>>
Help will always be given at Hogwarts to those who ask for it.
_FR>Если положить такой компонент на форму, то в дизайн-тайме он покажет содержимое таблицы "А".
То, что нужно!
Как раз и была проблема инициализации статических переменных в дизайн моде.
И про проверку DesignMode думал, но что-то переклинило, блин, мудрить начал.
Очень помогли, спасиб!
Здравствуйте, VKab, Вы писали:
VK>И про проверку DesignMode думал, но что-то переклинило, блин, мудрить начал.
DesignMode — не очень надёжное средство для определения того, что компонент действительно в этом режиме . Это много раз обсуждалось и здесь и на гдн. Так что поиск в помощь .
under «*none*»,
... << RSDN@Home 1.1.4 beta 7 rev. 462>>
Help will always be given at Hogwarts to those who ask for it.