相关疑难解决方法(0)

为什么使用AsQueryable()而不是List()?

我正在使用存储库模式进行数据访问,实体框架LINQ作为非测试存储库实现的基础.我看到的大多数样本在调用返回N个记录而不是List <T>时返回AsQueryable().这样做有什么好处?

c# linq iqueryable repository

55
推荐指数
3
解决办法
5万
查看次数

Azure Web App(ASP.NET MVC)每十分钟变冷一次,需要加载10到20秒

我对Azure Web App有一个非常奇怪的问题,我对此感到非常沮丧.

我们的应用程序在使用时非常快速且反应灵敏,但是,如果我们不使用它大约十分钟,它的启动非常冷(~10-20秒).这种冷启动仅在涉及数据库时才会发生.当它有点像我们发布网络应用程序时.

我们的尝试

在Azure中使用Application Insights,我们每隔5分钟设置一次ping:

在此输入图像描述

异常值总是由我的部署引起(现在不使用部署槽).但是,此登录页面不会调用我们的数据库,因此我们看不到这些数据中的"冷"启动.

应用程序设置应该是可靠的.我们的网络应用程序托管在北欧,具有Always on:

在此输入图像描述

我们刚刚将整个设置移至新的资源组/应用服务计划,以确保我们的问题与我们的其他应用程序纠缠在一起.新的应用服务计划是一个Standard 1 small,这应该不是问题.看看我们的消费情况,我并不担心,甚至可能尝试一下我解决问题后会做的小型服务:

在此输入图像描述

我们的SQL数据库也托管在北欧(检查位置十亿次,因为我之前犯了这个错误).

就像app服务一样,我们选择了"太大"的硬件来确保不会导致问题(标准S0:10 DTU).使用率低得离谱:

在此输入图像描述

我们确实使用持续部署(Deployment options在Azure菜单中),但是在查看部署时,它不应该经常部署:

在此输入图像描述

令人沮丧的是,应用程序在工作时具有超级响应性.当它"温暖"时,每个页面都会在几秒钟内加载,就像我的网络应用程序上显示的平均响应时间一样:

在此输入图像描述

但是当我们(或我们的用户!)使用我们的应用程序时,这些数字是完全错误的.在这里,我们经历了第一次+ 10-20秒的负载.

有谁有想法吗?任何提示?你不知道我会多么感激.

编辑和更新1:

我决定再设置一些测试.我现在设法通过调用另一个页面来获得显示我们问题的真实数据.具有讽刺意味的是,这个页面不会调用数据库,所以虽然我认为这是一个数据库问题,但它似乎不是这样的.在这里看到挑战(趋势持续+24小时).

奇怪的是它的稳定性大约是10秒.趋势似乎不是每10-20分钟,而是接近每5分钟 - 它们之间的间隔完全相同:

在此输入图像描述

编辑和更新2:

我一直在挖掘更多.事实证明,有一些非常有趣的见解:来自编辑1的"慢速"11秒调用仅来自美国东部和一个端点(http://prntscr.com/jcv69w),以及

我找到的最有趣的事情如下:

应用程序本身没有任何缓存.我使用实体框架,我假设使用一些缓存,但这就是全部.

我登录了我们的应用程序,并在Chrome中点击了.我发现,我访问过的页面是即时显示的(使用来自数据库的数据),但如果我打开一个新页面,它会加载缓慢.在我第一次打开页面时,似乎正在缓存某些实体.

然后我尝试在新的浏览器中打开应用程序.如果我打开了之前在Chrome中打开的页面,它会立即打开.如果我打开了一个我之前没有点击的新页面,它将会有~10秒的负载.

我现在最好的猜测是我使用的实体框架出于某种原因提出了问题.

编辑3:

刚刚添加了赏金,并且正在设置大量的日志记录.我添加了MiniProfiler,但无法让它在生产中工作(仅在本地请求中显示).

我还在global.asax中添加了日志记录Application_Start,Application_BeginRequestApplication_EndRequest在那里查看了一些和状态.将尽快更新结果.

编辑4:

所以现在我有了第一个有趣的数字.该应用程序没有被回收.Application_Start只被叫一次.

我可以看到通过登录的时间差EndRequestBeginRequest.我可以看到有多个调用,这两个调用之间需要超过+15秒......但是当网站温暖时,根据页面需要大约0.5-2秒.所以在请求的开始和结束之间发生了一些非常奇怪的事情.进一步调试!

编辑5:

让MiniProfiler工作.以下是慢负载(~15秒)的示例:

在此输入图像描述

我的下一步是添加实体框架跟踪,甚至更多线路调用.我在数据库上赚了钱!

编辑6:

Okidoki,我错了.它的渲染方法很慢 - 而不是数据库!我不知道如何调试这个... 到谷歌!

在此输入图像描述

编辑7:

是时候再次更新了.现状是:没有解决任何问题.

所以我尝试了很多东西:

1)我试图禁用所有类型的缓存(使用属性阻止ASP.NET MVC中的缓存以获取特定操作)并且我有相同的行为.首次加载?慢.下次加载?快速.等待5-10分钟,相同的行为所以没有解决.

2)我的startup.auth文件中有一些自定义的东西,延迟5分钟.删除.不是问题.

3)我使用自定义属性进行授权.我删除了.

4)我更新了我的实体框架实现,使其在每个请求中工作

我真的很沮丧.我的下一步是:

A)尝试制作相同页面的5-10个版本(没有_layout,带有布局,带数据库,没有数据库,有依赖注入,没有......所有这些),所以看看我是否能找到一个模式. …

asp.net asp.net-mvc azure azure-web-sites devops

18
推荐指数
1
解决办法
1292
查看次数

在存储库模式中加载子记录

使用LINQ TO SQL作为基于存储库的解决方案的基础.我的实现如下:

IRepository

FindAll
FindByID
Insert
Update
Delete
Run Code Online (Sandbox Code Playgroud)

然后我有扩展方法,用于查询结果:

WhereSomethingEqualsTrue() ...
Run Code Online (Sandbox Code Playgroud)

我的问题如下:

我的用户存储库有N个角色.我是否创建了角色存储库来管理角色?我担心,如果我走这条路,我最终会创建几十个存储库(每个表几个,除了连接表).每个表的存储库是否常见?

c# design-patterns domain-driven-design repository linq-to-sql

12
推荐指数
1
解决办法
8685
查看次数

性能瓶颈Url.Action - 我可以解决它吗?

我有一个应用程序,我最近从ASP.NET MVC1升级到ASP.NET MVC4 rc1.

它使用Webforms视图引擎.

每当使用Url.Action(动作,控制器)时,它都会出现性能问题.

我可以在ASP.NET MVC3中重现该问题.

我需要3ms来渲染在ASP.NET MVC1中有10个Url.Action帮助器实例的视图,在ASP.NET MVC3中渲染相同的40ms.

我已经找到了一些让它渲染得更快的方法:

  • 我将默认路线移到了顶部

  • 我删除了Url.Action并使用了静态链接

这感觉不对:应用程序非常大,我需要一个体面的工作路由的好处.我也不相信我发现了所有的性能瓶颈.路由是MVC的核心部分:如果某些事情表现不佳,它将弹出应用程序的不同部分.

我的印象是MVC3引入了一些路由功能(如正则表达式约束),即使我不使用它们也会导致性能不佳的应用程序.

有什么我可以做的事情,如转换路由功能或使用一组不同的URL助手?

此代码重现了此问题:

指数行动

public ActionResult Index()
        {

            return View();
        }
Run Code Online (Sandbox Code Playgroud)

的Index.aspx

<%@ Page Language="C#"  Inherits="System.Web.Mvc.ViewPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head >
    <title></title>
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
</head>

<body>
    <div class="page">
<%= Url.Action("Action1", "Controller1") %>
<%= Url.Action("Action2", "Controller2") %>
<%= Url.Action("Action3", "Controller3") %>
<%= Url.Action("Action4", "Controller4") %>
<%= Url.Action("Action5", "Controller5") %>
<%= Url.Action("Action6", "Controller6") %>
<%= Url.Action("Action7", …
Run Code Online (Sandbox Code Playgroud)

asp.net-3.5 asp.net-mvc-routing asp.net-4.0 asp.net-mvc-3 asp.net-mvc-2

7
推荐指数
1
解决办法
2508
查看次数

ASP.NET MVC性能

MVC性能的哪些方面最能影响您的Web应用程序性能?数据库访问通常被指出是默认的罪魁祸首,但是还有其他组件会产生影响吗?您是否优先考虑并发客户端数量,服务器上使用的内存,响应时间或其他内容?

这个答案包含一些非常好的一般性建议,但我正在寻找框架不符合您期望的具体细节.

asp.net-mvc performance

4
推荐指数
1
解决办法
892
查看次数