【发布时间】:2015-03-04 13:32:08
【问题描述】:
目前:
我有一个 ASP NET 项目,它使用了几个 ASHX。 每天 50000 次登录 API 调用几乎无法接受(并且每次登录都有不同数量的其他 API 调用)
但现在每天 150,000 次登录 API 调用需要 >1 分钟。
为了解决/解决问题,我在 API 的 1 个中使用 sproc 调用完成了这些操作,该调用仅检索数据:
1) 我在另一个全新的实例中运行它,在本地机器上,它的运行时间不到 100 毫秒;当前 Web 实例运行 > 1 分钟
2) 我在 SSMS 中单独运行 sproc,它需要 1 分钟
3) 我对该特定存储过程进行了本地参数分配,以防止参数嗅探并重新构建和重新执行,结果相同。
4) 序列化 Json(newtonsoft) 使用静态的部分,也很快,不到 1 秒。
我跑了“http://tools.pingdom.com/fpt/”,确实很慢;但我不知道为什么它很慢。
我尝试使用“DebugView”(“https://technet.microsoft.com/en-us/library/bb896647.aspx”),因为它可以在没有文件锁定的情况下写入大量日志,但不确定如何将它用于 Web 应用程序。
无论如何/工具可以从外部准确地捕获独立的 begin_request 和 end_request 时间?(我试图将时间跨度放在 Global.asax 中,但有时会得到一些空参数)最好如果有人有找出导致它的部分的想法。
样本时间跨度测试:
private string single_detail(HttpContext context)
{
PlayDetailApiResult o = new PlayDetailApiResult
{
...
};
string json = generateJsonFromObj(o); // init default
try
{
{
{
long current = 0;
DateTime dtStart = DateTime.Now;
// call sp
int ret = plmainsql.getPracticeQualificationTimeLeft(...);
DateTime dtEnd = DateTime.Now;
TimeSpan ts = dtEnd - dtStart;
LoggingHelper.GetInstance().Debug("single_detail getPracticeQualificationTimeLeft's duration(ms): " + ts.TotalMilliseconds);
if (ret != 0)
{
o.Code = ...;
}
}
DateTime dtStart_1 = DateTime.Now;
json = generateJsonFromObj(o);
DateTime dtEnd_1 = DateTime.Now;
TimeSpan ts_1 = dtEnd_1 - dtStart_1;
LoggingHelper.GetInstance().Debug("single_detail generateJsonFromObj's duration(ms): " + ts_1.TotalMilliseconds);
}
}
catch (Exception ex)
{
LoggingHelper.GetInstance().Debug("single_detail : " + ex.Message + "|" + ex.StackTrace);
}
finally
{
}
return json;
}
大部分结果:
2015-03-04 18:45:29,263 [163] 调试 LoggingHelper single_detail getPracticeQualificationTimeLeft 的持续时间(毫秒):5.8594
2015-03-04 18:45:29,264 [163] 调试 LoggingHelper single_detail generateJsonFromObj 的持续时间(毫秒):0
这些我记下了。
1) 计算机的处理器使用率和内存使用率:内存在 70%,我认为这还不是峰值
2) 检查是否启用了 Gzip 压缩:我的 json 在移动设备上运行 (iOS/Android/WM);需要进行一些代码更改,并且未经测试以防止任何压缩-解压缩问题;因为压缩同时也会增加 CPU 使用率
【问题讨论】:
-
分析器?在您的 .net 代码中添加行以检查通话前后的时间?
-
您需要使用分析器来查明您的瓶颈所在,并专注于此。我以前使用Red Gate ANTS profiler 很幸运。我与 Red Gate 没有任何关系 - 我只是对该产品有过很好的体验。
-
@TabAlleman:sql 分析器?它在 SSMS 上运行得非常快;
-
@G_P:它可以分析当前正在运行的 ASP Web 项目吗?不过有点贵。
-
Profiler 会在您的应用调用它时告诉您它的运行速度。
标签: asp.net sql-server