Есть много других сообщений, касающихся записи времени выполнения метода (например, через postsharp, через action filters или через собственный атрибут метода).C# MVC Выполнение и выполнение протокола ведения журнала MVC
Таким образом, для записи времени для завершения метода относительно прямолинейно.
Однако я хочу, чтобы получить более мелкие показатели производительности для каждого запроса, используя, например, идентификатор сеанса для отслеживания всех операций, выполняемых для данного запроса, - и время истекает для все они, а не только родительский (т.е. контроллер действия).
Например, я хотел бы быть в состоянии сделать что-то вроде:
namespace MvcApplication1.Controllers
{
public class ProductController : Controller
{
//record start of method
public ActionResult Index()
{
//record start of service1.method call
var data = service1.method();
//store total time of service1.method call
//record start of db call
var objects = db.select(obj).where(id=0)
//store total time of db call
return View();
}
//record total time of method
}
}
В идеале я хочу, чтобы связать все эти операции (родительский метод, вызова службы и вызов дб) вместе - скорее всего, кандидат будет через идентификатор сеанса, но это означает, что для каждого вызова потребуется доступ к идентификатору сеанса.
Из того, что я прочитал, лучшим способом добиться этого было бы использовать атрибут метода для записи родительского времени выполнения, а затем некоторую функцию пользовательской библиотеки для хранения различных сроков вызовов (возможно, используя nlog для записи).
То, что я прошу, - это мнения о том, какой лучший способ (если вообще возможно) выполнить вышеизложенное?
Я пропустил что-то с любыми имеющимися сторонними библиотеками - т. Е. Поддерживает ли Unity или Postsharp эту функциональность (или какую-то другую библиотеку)?
Можно ли связать все эти записи с помощью идентификатора сеанса? Например, я не вижу, как через postsharp (1) хранить вызовы отдельных методов INSIDE в действии MVC и (2) передавать переменные между вызовами.