Как отобразить содержимое кеша asp.net?

У нас есть веб-приложение asp.net MVC, которое использует HttpRuntime.Cache
объект, чтобы сохранить некоторые статические значения поиска. Мы хотим иметь возможность контролировать то, что
кэширование в реальном времени, чтобы мы могли определить некоторые возможные проблемы с кэшированием.

Поскольку этот объект не является строго типизированным при чтении с него, нам нужно динамически
приведите каждую запись к ее конкретному типу.

Большинство кэшируемых элементов имеют IEnumerable, где T может быть любым классом, который мы используем в нашем
проект или новые, которые в конечном итоге могут быть добавлены по мере продвижения проекта.
Может кто-нибудь дать мне указатель, как это сделать?

Большое спасибо.

4 ответа

Решение

Используйте сам ASP.NET MVC.

public ActionResult Index()
{
    return View(HttpRuntime.Cache)
}

и для просмотра

Html.DisplayForModel()

Вы захотите использовать пользовательский шаблон объекта (в основном возьмите шаблон MVC и отключите ограничение глубины).

http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html

На шаблоне объекта вы хотите изменить

else if (ViewData.TemplateInfo.TemplateDepth > 1) { %>
    <%= ViewData.ModelMetadata.SimpleDisplayText %>

И измените> 1 на большее число, например 5-10, или просто полностью удалите эту проверку глубины (я бы, вероятно, начал с 5 и пошел оттуда).

Вы можете попытаться Json сериализовать его, используя класс JavaScriptSerializer. Таким образом, вам не нужно приводить к исходному типу как Serialize Метод может взять любой объект и вывести его в удобочитаемом формате JSON. Это может подавить некоторые сложные типы, и если это произойдет, вы также можете попробовать Newtonsoft Json.NET.

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

Ну, я думаю, что вы запрашиваете способ определения параметров типа универсального типа во время выполнения - в вашем примере ситуация сложна, потому что вы после интерфейса, а не экземпляра объекта.

Тем не менее, это все еще довольно просто, следующий пример должен по крайней мере указать вам правильное направление, как это сделать:

object obj= new List<string>();
Type type = obj.GetType();

Type enumerable = type.GetInterfaces().FirstOrDefault(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IEnumerable<>));
if (enumerable != null)
{
    Type listType = enumerable.GetGenericArguments()[0];
    if (listType == typeof(string))
    {
        IEnumerable<string> e = obj as IEnumerable<string>;
    }
}

Но я не могу понять, как это поможет вам решить основную проблему мониторинга кеша?

В прошлом, когда я пытался отслеживать производительность кэшей, я обнаружил, что создание собственных простых счетчиков Perfmon очень полезно для целей мониторинга - в качестве базового примера начнем со счетчика "# Entries" (который увеличивается при каждом добавлении элемента в кэшируйте и уменьшайте всякий раз, когда элемент удаляется из кеша), и добавляйте счетчики, которые, по вашему мнению, будут полезны на ходу - счетчик попаданий в кэш и счетчик пропусков в кеше обычно тоже довольно полезны.

Вы также можете иметь свой счетчик Perfmon для разбивки информации о кэшировании, имея много экземпляров ваших счетчиков, по одному для каждого типа, который кэшируется (или, в вашем случае, более вероятно, универсальный). IEnumerable кэширование типа) - так же, как в группе счетчиков перфмонов "Процесс" есть экземпляр для каждого процесса в вашей системе, у вас будет экземпляр для каждого типа в кэше (плюс вы также должны добавить экземпляр "_Total" или аналогичный).

Использование счетчиков Perfmon путем записи операций в кеш позволяет вам контролировать производительность вашего кеша с достаточным количеством деталей при минимальных затратах времени выполнения.

Другие вопросы по тегам