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

我正在创建一个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的工作(与我们的应用程序相同),因此应该没有问题.但是,对我们来说,将应用程序放在专用服务器上确实解决了该问题…

上一篇:javascript-有关如何优化IE中某些Jquery命令性能的提示


下一篇:java-休眠:从未使用过查询缓存