2013-02-25 5 views
0

Мне нужно загрузить xml-файл в память и сделать его доступным для всего мира для всего сайта. Выполняет ли этот код это?Будет ли это глобальным для всего сайта?

Если да, то как обновляется эта «кэшированная» версия, выполненная в будущем?

XPathDocument ConvProductDoc; 

    ConvProductDoc = Cache["doc"] as XPathDocument; 
    if (ConvProductDoc == null) { 
     ConvProductDoc = new XPathDocument(HttpContext.Current.Request.MapPath(@"\data\foo\bar\my.xml")); 
     Cache.Insert("doc", ConvProductDoc); 
    } 
+0

зависит от того, что такое 'Cache' и как настроен ваш сайт. – Jodrell

+0

ОК, пожалуйста, простите мое невежество, есть ли ссылка, которая может объяснить, что вы предлагаете дальше? – 2013-02-25 18:04:37

ответ

1

Да, объект ASP.NET Cache является площадкой для сайта. Есть много вариантов для управления Cache и установление правил истечения срока действия и т.д.

Чтобы назначить/изменить значение в Cache, вы просто установить его, как и любой Dictionary или HashTable значение:

Cache["doc"] = newValue; 

Вы можете прочитать намного больше о объекте Cache в Документах MSDN здесь: http://msdn.microsoft.com/en-us/library/aa478965.aspx#aspnet-cachingtechniquesbestpract_topic4

+0

@SoftwareSpint дает хорошее представление о сайтах, распределенных между несколькими серверами, однако ASP.NET имеет встроенные механизмы управления кэшем на нескольких серверах. Эта статья может помочь: http://msdn.microsoft.com/en-us/magazine/dd942840.aspx –

+0

Как насчет обнаружения нового файла? Я уверен, что это возможно? – 2013-02-25 18:08:05

+0

Да, вы, безусловно, можете использовать «FileSystemWatcher», который будет контролировать файл, однако это будет отдельная операция, которую вам нужно будет использовать - вы будете отслеживать файл, а затем вручную обновлять «Cache» на основе изменений в файл. И вам нужно будет рассмотреть, где находится файл - на одном из серверов или в любом из них? Вы можете узнать больше о 'FileSystemWatcher' [здесь] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx) –

1

Если у вас есть сайт только на одном сервере, то да.

Если ваш сайт распространен более чем на одном сервере, то нет. Кэш-ключ и данные будут доступны только на сервере, на котором он был сохранен.

Если вы используете сервер Amazon EC2, вы можете использовать ElastiCache, который обеспечит доступ к кешу в распределенной серверной среде.

+0

Получил это, да, это имеет смысл, и для меня данное. Это было бы хорошо. Итак, короткий ответ «да, только на этом сервере»? Думаю, я балансирую нагрузку между шестью серверами (страница получает 5 тыс. Хитов в день). – 2013-02-25 18:06:39

+0

@Jimmmy, поэтому 'Cache' является http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx – Jodrell

+0

Правильный вариант« на одном пуле »не на одном сервере, потому что если у вас есть веб-сад (больше пулов работает), то каждый пул имеет свой кеш. – Aristos

Смежные вопросы