none
Хранение данных RRS feed

  • Вопрос

  • Есть ли способ длительного хранения переменной в оперативной памяти?

    Создаем, например, string s = DateTime.Now; и при чтении ее через, скажем, неделю убеждаемся в этом - s не меняется.

Ответы

  • Приложение на IIS (точнее, пул приложений) выключается после 20 минут неактивности (по умолчанию). Подредактируй настройки ресайклинга для аппула - и приложение вместе с переменными будет жить достаточно долго.

    Если нужно сохраять значение действительно долго - записывай его в файл. Или в базу данных. Workflow - это просто косвенный способ сохранить значение в базу данных.


    My blog | My pet project

Все ответы

  • Оперативная память — энергозависимая часть системы компьютерной памяти, в которой временно хранятся данные и команды, необходимые процессору для выполнения им операции.

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

    Simple XML Parser in C#

    XML File Parsing in VB.NET

  • Странный вопрос в странном разделе. Если приложение в течении недели не выключалось - значение s не изменится.


    My blog | My pet project
  • У меня silverlight application на iis. Вроде как через workflow service можно данную проблему решить, но до конца не представляю как.
  • Странный вопрос в странном разделе. Если приложение в течении недели не выключалось - значение s не изменится.


    My blog | My pet project

    Проверить просто. Запустите приложение на IIS(это-же раздел раз-ка при-й веб), в котором s static или хранится в кеше. s будет существовать не более часа..
  • Приложение на IIS (точнее, пул приложений) выключается после 20 минут неактивности (по умолчанию). Подредактируй настройки ресайклинга для аппула - и приложение вместе с переменными будет жить достаточно долго.

    Если нужно сохраять значение действительно долго - записывай его в файл. Или в базу данных. Workflow - это просто косвенный способ сохранить значение в базу данных.


    My blog | My pet project
  • В том и проблема - эти файлы наберут 100 мгб. После 20 минут, клиент делает запрос, т.е. создается клиент к службе, которая работает с объектом - читается 100 мгб, инициализация и т.д. sql server тоже служба в некотором смысле. Ну может это и не так принципиально, но было бы красивее, если бы такая(емкая по объему) статическая база хранилась в о-й памяти - совсем нет способов? toylex.net
  • Один огромный несоставной объект размеров в 100 мегабайт, который нужно целиком загрузить в память для обработки каждого запроса от клиента?Как-то тяжело представляю себе такую ситуацию. Наверняка все 100 мб при обработке запроса не нужны. А если действительно нужны - то логику стоит написать прямо на SQL.


    My blog | My pet project
  • Согласен, SQL - вариант. Но переделывать существующие структуры данных, писать сценарии под SQL(после LINQ).. Может есть какой-другой способ хранения объектов в о.памяти?
  • За исключением настроек ресайклинга?

    Такого способа, чтобы объекты остались в оперативной памяти поcле рестарта iis или физческого сервера - нет.

    Если используется LINQ - значит уже не нужен весь 100-метровый объект. LINQ to SQL существует. Переложи данные в sql server, даже переписывать особо ничего не придется.


    My blog | My pet project
  • Да, есть такая технология - WWF (Windows Workflow Foundation).

    Цитирую: Предоставляет модель программирования, внутрипроцессный обработчик рабочих процессов и конструктор, поддерживающий повторное размещение, для реализации процессов, выполняющихся длительное время, в качестве рабочих процессов внутри приложений .NET.

     


    Don't forget to vote for useful replies and/or mark answers for your questions - that helps other guys to find the answer faster.
    • Предложено в качестве ответа Dmitry Pavlov 3 мая 2011 г. 19:51
  • Да, есть такая технология - WWF (Windows Workflow Foundation).

    Не могли бы Вы показать самый примитивный WF пример, в котором создаем, например, string s = DateTime.Now; и при чтении ее через, скажем, неделю убеждаемся в этом - s не меняется. Месяц с WF упражнялся - не смог, прошу прощения за тупость.

  • Примитивный пример тут, к сожалению, все равно не поможет.

    Могу порекоммендовать к прочтению вот эту книжку: Дхарма Шукла, Боб Шмидт. Основы Windows Workflow Foundation

    Читал сам - очень плавно и достаточно понятно (для такой непростой темы) вводит в суть нового подхода разработки - разработка реактивных возобновляемых программ.


    Don't forget to vote for useful replies and/or mark answers for your questions - that helps other guys to find the answer faster.
  • WWF, конечно, хороший вариант. Но состояние в нем сохраняется в тот же SQL Server. 100 мегабайт траффика к серверу и обратно топикастера почему-то не устраивают. А сохранение через WWF этот траффик никуда не денет + добавит свой.
    My blog | My pet project

  • "Примитивный пример тут, к сожалению, все равно не поможет."

    Как же Вы рекомендуете технологию, которую не можете в самом простом случае применить.

    "WWF, конечно, хороший вариант. Но состояние в нем сохраняется в тот же SQL Server. 100 мегабайт траффика к серверу и обратно топикастера почему-то не устраивают. А сохранение через WWF этот траффик никуда не денет + добавит свой."

    Очень согласен, плюс "к серверу и обратно" не имеет смысла, если база данных-объектов статическая, а при большом размере этой базы, подозреваю, sql работает с ней через опять же ж.диск. Если у меня данные, например, struct {int i; int [n] j;}, то при переводе в таблицу бд объём данных увеличится в n раз, что опять же не здорово.

    А можно как-нибудь автономную, не зависимую от iis, службянку создать с данными-объектами и к ней обращаться??

  • Как же Вы рекомендуете технологию, которую не можете в самом простом случае применить.

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

    "WWF, конечно, хороший вариант. Но состояние в нем сохраняется в тот же SQL Server. 100 мегабайт траффика к серверу и обратно топикастера почему-то не устраивают. А сохранение через WWF этот траффик никуда не денет + добавит свой."

    Очень согласен, плюс "к серверу и обратно" не имеет смысла, если база данных-объектов статическая, а при большом размере этой базы, подозреваю, sql работает с ней через опять же ж.диск. Если у меня данные, например, struct {int i; int [n] j;}, то при переводе в таблицу бд объём данных увеличится в n раз, что опять же не здорово.

    Меня, признаться, в приципе смущает задача, в которой 100 мегабайт данных "ходит" между клиентом и сервером. WWF, кстати, в базу сохраняется только по умолчанию. Как и во многих других фреймворках Майкрософт - здесь можно кастомно дописать, что, как и куда сохранять. Но обычно, это просто не нужно.
    А можно как-нибудь автономную, не зависимую от iis, службянку создать с данными-объектами и к ней обращаться??

    Если IIS использовать не хочется, можно сделать и запустить на машине выполнения свой Windows Service. Он может хранить данные в памяти (ну или еще где-то, где Вам нужно). 

    Есть еще, конечно, вариант - ипользовать Remoting, если взаимодействия предполагается делать внутри локальной сети (через интеренет обычно не работает из-за всяких файрволов, натов и т.п.)


    Don't forget to vote for useful replies and/or mark answers for your questions - that helps other guys to find the answer faster.

  • Перечитал Andrew Zhu, разобрал все примеры, но не смог строку увековечить. Может Вы знаете алгоритм, я спрашивал? Ну, например, создается WF служба на IIS(вместе со строкой), которая при обращении к ней выдает одно и то-же значение. Всячески эксперементировал, но результата не добился. Между клиентом и сервером "гонять" 100 мгб в принципе идиотизм и я, слава богу, еще до этого не дошел. Но и пересоздавать такой объем объектов на стороне сервера для работы клиента тоже не здорово.

  • Ясомневаюсь, что можно получить ответ на абстрактынй вопрос "как никуда не сохранять 100 мегабайт абстрактных данных, и при этом не потерять из при перезагрузке". Если бы универасальный способ существовал - его бы давно использовали все подряд.

    У тебя же не абстрактный клиент с абстрактный запросом приходит.  Сделай, как выше Dmitry Pavlov предложил - используй windows service для хостинга backend-а.


    My blog | My pet project