我正在创建一个asp.net应用程序(已完成许多应用程序之一).
但这是我第一次遇到此特定问题.
当我第一次按下页面上的按钮时(因此应用程序已经加载),这非常慢.
第一次单击按钮后,该页面上的所有其他呼叫都运行得非常快(应该如此).
我打开了sql profiler和charles(http调试器)以查看发生了什么,有趣的部分是:页面本身很慢,执行的查询总共需要50毫秒才能执行,但是启动该查询需要18秒调用数据库.
因此,.net代码花很长时间才能启动他的sql代码.我真的不明白.
我希望有人能帮助我.
这是我的应用程序层的完成方式:
母版页->页面->用户控制(在转发器内)->按钮.
该按钮仅执行一个服务层,该服务层将访问存储库层,该存储库层将开始对数据库的调用.
这是我得到的日志.
这是我的应用程序结构:
UserService-> UserRepository:RepositoryBase-> dataAccess.
编码:
public User GetByEmailAndPassword(string email, string password)
{
_log.Info("UserRepository.GetByEmailAndPassword - Start");
this.Test();
User result = null;
List<DbParam> parameters = new List<DbParam>();
parameters.Add(new DbParam("@Email", email, DbType.String));
parameters.Add(new DbParam("@Password", password, DbType.String));
_log.Info("UserRepository.GetByEmailAndPassword - Entering reader");
var reader = ExecuteReader("User_GetByEmailAndPassword", parameters);
if (reader.Read())
{
result = _entityFactory.ConvertToModel(reader);
}
reader.Close();
_log.Info("UserRepository.GetByEmailAndPassword - End");
return result;
}
知识库库:
public abstract class RepositoryBase<T>
where T : IEntity
{
private static ILog _log = LogManager.GetLogger(typeof(RepositoryBase<T>));
protected IEntityFactory<T> _entityFactory;
protected RepositoryBase()
{
_log.Info("Constructor");
_entityFactory = EntityFactoryBuilder.BuildFactory<T>();
}
protected IDataReader ExecuteReader(string storedProc, List<DbParam> parameters)
{
_log.Info("ExecuteReader - Start");
_log.Info("Open connection");
var db = DatabaseFactory.CreateDatabase();
_log.Info("Open command");
var dbCommand = db.GetStoredProcCommand(storedProc);
foreach (DbParam param in parameters)
{
db.AddInParameter(dbCommand, param.Name, param.Type, param.Value);
}
_log.Info("Execute command");
var reader = db.ExecuteReader(dbCommand);
_log.Info("ExecuteReader - End");
return reader;
}
}
记录显示仅进入此功能就需要14秒.
var reader = ExecuteReader("User_GetByEmailAndPassword", parameters);
这不是执行,而只是输入功能.
我真的不知道为什么在基类中调用一个函数要花这么长时间.
我可以添加一些日志记录数据,但它仅显示了我在这里所说的内容.
难道这是虚拟服务器的财产?
因为在非虚拟服务器上测试相同的应用程序根本没有这个问题.
干杯,
M.
解决方法:
我在工作中遇到了类似的问题.原因是网站运行所在的服务器是虚拟服务器.看起来您没有做任何占用大量CPU的工作(与我们的应用程序相同),因此应该没有问题.但是,对我们来说,将应用程序放在专用服务器上确实解决了该问题…