gpt4 book ai didi

c# - 为什么我的应用程序调用这么慢?

转载 作者:行者123 更新时间:2023-11-30 16:33:04 25 4
gpt4 key购买 nike

我正在创建一个 asp.net 应用程序(我做过的许多应用程序之一)。
但这是我第一次遇到这个具体问题。

当我第一次在页面上按下按钮时(因此应用程序已经加载)这非常非常慢。

在我第一次点击该按钮后,该页面上的所有其他调用都非常快速(应该如此)。

我已经打开了 sql profiler 和 charles(http 调试器)来查看发生了什么,有趣的是:页面本身很慢,执行的查询总共需要 +- 50ms 才能执行,但需要 18启动对数据库的调用的秒数。

所以 .net 代码在开始他的 sql 代码之前需要很长时间。我真的不明白。我希望有人能帮助我。

我的应用层是这样完成的:

Masterpage --> page --> usercontrol (within repeater) --> button。

该按钮仅执行一个服务层,该服务层将访问将开始调用数据库的存储库层。

这是我得到的日志。

这是我的应用程序结构:

UserService --> UserRepository : RepositoryBase --> 数据访问。代码:

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);

这不是执行它,而是进入函数。

我很吃惊,我真的不知道为什么调用基类中的函数要花这么长时间。

我可以添加一些日志记录数据,但它只显示我在这里所说的内容。

难道这是虚拟服务器的属性?
因为在非虚拟服务器上测试同一个应用程序根本不会出现这个问题。

干杯,

最佳答案

我在工作中遇到了类似的问题。原因是网站运行的服务器是虚拟服务器。看起来您没有做任何 CPU 密集型的事情(与我们的应用程序相同),因此应该没有问题。但是,对我们来说,将应用程序放在专用服务器上确实解决了问题...

关于c# - 为什么我的应用程序调用这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3545178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com