我正在为ASP MVC中的搜索框构建一个查询。查询在LINQPad中需要10毫秒,在Visual Studio中需要16秒。有什么方法可以改进查询或查询的时间响应吗?
var queryOracle = (from TS in dbOracle.BI_TYPE_SERVICE
join MS in dbOracle.BI_MTR_SRV on TS.BI_ACCT equals MS.BI_ACCT
join SL in dbOracle.BI_SRV_LOC on MS.BI_SRV_LOC_NBR equals SL.BI_SRV_LOC_NBR
join C in dbOracle.BI_CONSUMER on TS.BI_ACCT equals C.BI_ACCT
join P in dbOracle.BI_PERSONAL on C.BI_CUST_NBR equals P.BI_CUST_NBR
join STR in dbOracle.BI_SRV_STAT_REF on TS.BI_SRV_STAT_CD equals STR.BI_SRV_STAT_CD
where P.BI_ADDR_TYPE != "2B" || P.BI_ADDR_TYPE != "2D" || P.BI_ADDR_TYPE != "FO" || P.BI_ADDR_TYPE != "CC" || P.BI_ADDR_TYPE != "8" || P.BI_ADDR_TYPE != "SE" || P.BI_ADDR_TYPE != "9" || P.BI_ADDR_TYPE != "BD" || P.BI_ADDR_TYPE != "CN" || P.BI_ADDR_TYPE != "CR" || P.BI_ADDR_TYPE != "CS" || P.BI_ADDR_TYPE != "M1" || P.BI_ADDR_TYPE != "M2" || P.BI_ADDR_TYPE != "M3" || P.BI_ADDR_TYPE != "MR"
where P.BI_ACCT == 0
where P.BI_FORMAT_NAME.StartsWith(term) || SL.BI_ADDR1.StartsWith(term) || MS.BI_MTR_NBR.StartsWith(term) || TS.BI_ACCT.ToString().StartsWith(term)
select new
{
LocationID = SL.BI_SRV_MAP_LOC,
MeterNumber = MS.BI_MTR_NBR,
AccountNumber = TS.BI_ACCT,
ServiceStatCD = TS.BI_SRV_STAT_CD,
ServiceStatus = STR.BI_SRV_STAT_DESC,
Name = P.BI_FORMAT_NAME,
ServiceAddr = SL.BI_ADDR1,
ServiceCity = SL.BI_CITY,
CustomerNumber = C.BI_CUST_NBR,
ServiceCNTY = SL.BI_CNTY_CD,
ServiceTOWN = SL.BI_TOWN_CD,
HomeAreaCode = P.BI_HOME_AREA_CD,
HomePhone = P.BI_HOME_PHN,
BusAreaCode = P.BI_BUS_AREA_CD,
BusPhone = P.BI_BUS_PHN,
MobileAreaCode = P.BI_MOBL_AREA_CD,
MobilePhone = P.BI_MOBL_PHN
}).AsNoTracking().Take(12).ToList();发布于 2016-01-20 22:43:30
我也有同样的问题,我想知道为什么。在我的例子中,代码中有一个断点,当在VS环境中运行时,它会减慢整个过程。
因此,在VS中禁用查询中使用的断点应该会更快。
发布于 2016-01-20 22:38:15
第一个问题:为什么不使用单独的函数?
我建议您使用Parallel.For或Parallel.ForEach来完成此操作
我绝对不会在主线程中运行它。
我建议使用:
除了这个查询之外,知道你还使用了什么代码是很重要的。
也许这并不是查询本身需要时间。
诚挚的问候
https://stackoverflow.com/questions/34902771
复制相似问题