我正在开发一个MVC网站上的性能问题.当站点在Azure中托管时,在第一次加载页面时,视图的呈现阶段会花费大量时间,我们每页说的是15-60秒.之后对同一页面的后续加载非常快速,正如人们所期望的那样.这是来自Glimpse的第一次点击页面的痕迹:
从图中可以看出,Razor渲染似乎是主要的攻击者.我已经阅读了很多关于Razor视图预编译的内容,我已经尝试过实现它,但它对我们没有任何影响.我也正在使用Azure Web App开发人员,他们指责Glimpse是一个问题,但我已经尝试过没有安装Glimpse的应用程序,它仍然像往常一样慢.
我变得非常困在这里......任何想法?
我无法使用资源管理器模板以编程方式查找有关向WebApps添加插槽的信息/指南.我的基本配置运行良好,创建了WebApp本身,SQL服务器,SQL DB等,但我也很想完成插槽,所以我可以将它们用于开发/测试版本.
有谁知道这有什么好资源?
我一直在浏览我正在开发的应用程序,它大量使用不变性.我刚刚发现只有getter的自动属性在C#6.0中,所以我正在重构使用它们.我打了一个可能的问号,这是我通过公共属性公开private IList<T>对象的地方ReadOnlyCollection<T>,以避免它们被转换回原始List<T>对象的可能性,例如
private IList<string> tags = new List<string>();
public IEnumerable<string> Tags => new ReadOnlyCollection<string>(this.tags);
有没有办法在这种类型的自定义getter中使用自动属性?
在我的应用程序中的管道上,有一个选项可以注入一组预请求处理程序,这些请求处理程序可以在请求首次进入管道时对其进行更改。管道是完全异步的,因此必须等待这些请求前处理程序调用(以及其他所有请求)。我有几种不同的方式来调用这些处理程序,我想知道它们之间是否有任何区别,如果有什么区别?例如,是否将各种处理程序以相同的顺序调用?哪个选项可能提供最佳性能?
选项1:foreach
foreach (var handler in this.preRequestHandlers)
{
await handler.Handle(request);
}
Run Code Online (Sandbox Code Playgroud)
选项2:ForEach()
this.preRequestHandlers.ForEach(async handler => await handler.Handle(request));
Run Code Online (Sandbox Code Playgroud)
选项3:Task.WhenAll()
await Task.WhenAll(this.preRequestHandlers.Select(handler => handler.Handle(request)));
Run Code Online (Sandbox Code Playgroud) azure ×2
c# ×2
asp.net-mvc ×1
async-await ×1
asynchronous ×1
c#-6.0 ×1
deployment ×1
dsc ×1
performance ×1
razor ×1