gpt4 book ai didi

c# - LINQ to Nhibernate 性能

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

我正在使用 NHibernate 和 LINQ 的组合来尝试实现查询,但我担心以下查询会从数据库中拉回每个用户行,从而导致数据库延迟大、网络流量大、内存大足迹,然后将其过滤掉,为时已晚。

public bool CheckEmailAddressIsAvailable
(string emailAddress, IDataRepository repository)
{
var users = from user in repository.GetItems<User>()
where user.EmailAddress.Equals(
emailAddress,
System.StringComparison.CurrentCultureIgnoreCase)
select user;

return !(users.Any());
}

DataRepository 是 NHibernate Session 的简单包装器我想知道的是双重的

1) 如何记录正在创建的所有 NHibernate SQL,以便我可以关注正在运行的内容和2) 如何运行上面的查询来模拟下面的 SQL

select count(*) from [User] where EmailAddress = @emailAddress

最佳答案

NHibernate 使用 log4net 进行日志记录,因此如果您已经在使用它,一种方法是在 中将 NHibernate.SQL 记录器级别设置为 DEBUG app.config 文件:

<logger name="NHibernate.SQL">
<level value="DEBUG"/>
</logger>

通常,与任何其他应用程序一样,您可以简单地使用 SQL Profiler 并记录查询一段时间。

关于您的 LINQ 代码,我很确定它会创建类似于您下面的 SQL 查询,但如果不查看 GetItems 代码就很难判断。

如果这感觉很慢,您可能需要在 EmailAddress 列上建立索引。 SQL 事件探查器的好处在于,您可以在数据库引擎优化顾问中分析其日志,并获得有关如何改进它的建议。

关于c# - LINQ to Nhibernate 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9735896/

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