Asp.net 使用分页获取时性能较慢
我正在使用PetaPoco执行一个sql查询,该查询通常会返回大约4000行 以下是构建sql的代码:Asp.net 使用分页获取时性能较慢,asp.net,sql-server,petapoco,Asp.net,Sql Server,Petapoco,我正在使用PetaPoco执行一个sql查询,该查询通常会返回大约4000行 以下是构建sql的代码: var sql = PetaPoco.Sql.Builder .Append("Select ") .Append("Participants.ParticipantID") .Append("From Participants") .Append("Inner Join Organizations") .Append("On Participants.OrgID = Organization
var sql = PetaPoco.Sql.Builder
.Append("Select ")
.Append("Participants.ParticipantID")
.Append("From Participants")
.Append("Inner Join Organizations")
.Append("On Participants.OrgID = Organizations.OrgID")
.Append("Left Join Departments")
.Append("On Participants.DepartmentID = Departments.DepartmentID")
.Append("Where")
.Append("Participants.OrgID = @0", 6328);
.Append("and Participants.Last_Name like @0", "P%");
.Append("and ")
.Append("Participants.OrgID in ")
.Append(" (")
.Append(" Select")
.Append(" OrgID ")
.Append(" from ")
.Append(" Organizations")
.Append(" Where")
.Append(" AssociationID = @0", 318)
.Append(" )");
如果我将整个记录集向后拉,并使用LINQ对结果进行分页,则页面将在大约250ms内呈现。代码如下:
List<ParticipantVMItem> PagedResult = null;
var FullResult = db.Fetch<ParticipantVMItem>(sql);
PagedResult = FullResult.Skip((PageNo - 1) * PageSize).Take(PageSize).ToList();
List<ParticipantVMItem> PagedResult = null;
PagedResult = db.Fetch<ParticipantVMItem>(4, 250, sql);
List PagedResult=null;
var FullResult=db.Fetch(sql);
PagedResult=FullResult.Skip((PageNo-1)*PageSize.Take(PageSize.ToList();
如果我尝试使用PetaPoco内置的分页功能,该页面的渲染时间将超过4200毫秒。代码如下:
List<ParticipantVMItem> PagedResult = null;
var FullResult = db.Fetch<ParticipantVMItem>(sql);
PagedResult = FullResult.Skip((PageNo - 1) * PageSize).Take(PageSize).ToList();
List<ParticipantVMItem> PagedResult = null;
PagedResult = db.Fetch<ParticipantVMItem>(4, 250, sql);
List PagedResult=null;
PagedResult=db.Fetch(4250,sql);
奇怪的是,《一瞥》和《Sql事件探查器》向我展示了在这两种情况下运行的实际Sql命令所用的时间大致相同。然而,一瞥表明,在第二种情况下,延迟发生在连接打开之前。有人能解释这种行为吗
更多信息:我正在运行Sql Server 2008R2PetaPoco分页正则表达式存在问题。 这通常会成为长SQL上的一个问题,但其他SQL也会受到影响 这可以通过将rxOrderBy正则表达式替换为
公共静态正则表达式rxOrderBy=新正则表达式(@“\bORDER\s+BY\s+(?:\((?>\(?)|\)(?)|.*(?(深度)(?!)\)|[\w\(\)\.\[\]”“]+(?:\s+(?:ASC | DESC))?(?:\s*,\s*(?:((?)|)((?)(?)(?)|.*(?(深度)(?!)|[\w()\.[])+(?:\s+(?:ASC | DESC*)*”),RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.RegexOptions.Singleline | RegexOptions;
或者通过使用NPoco,一种具有API兼容性的增强型PetaPoco分支。解决方案中定义的rxOrderBy给出了一个例外,因为组名深度未知。关于这件事有什么线索吗?我对这件事不太熟悉。你和NPoco有同样的问题吗?你能试试吗?它使用了一个dif regex。我已经将这个问题隔离到以下regex:公共静态regex,我已经将这个问题隔离到以下regex:公共静态regex,我已经将这个问题隔离到以下regex:公共静态regex,我已经将这个问题隔离到以下regex:公共静态regex,我已经将这个问题隔离到以下regex:我已经将这个问题隔离到以下regex:公共静态regex:公共静态regex RXXXXXOrOrOrOrOrOrderRBRXOrderRBRXRRRRRRXOrderBY=======新regex=新regex(((((@“““““““\边境\边界\s\s\s\s\s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+s+?:\s+(?:ASC | DESC))?)*“,RegexOptions.rightoleft | RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.Compiled);替换为此项或使用NPoco。不管怎么说都好<目前,该地区的代码>Regex(@“\边界\s+由以下两个国家的以下以下以下两种+政府当局+政府当局+Regex(((“))代码>Regex((((“))波形波形波形波形>目前((((()))强强难难难难难难难难难难难难难难难)及(((((深度)深度((())))\;((((;))除除除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了上述上述上述上述上述上述上述上述上述两两两(((((“))))));;;;;;;;;;;)除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除除上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.Compiled)代码>谢谢。也许我们应该将这些评论整合到上面的答案中,这样我就可以接受它并结束这个问题。有人在petapoco提出拉取请求吗?还是有什么理由不这么做?我在peta poco中创建了一个问题:哪个引用了这个问题