Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate比经典的ODBC驱动程序快吗?_C#_Sql_Nhibernate_Odbc - Fatal编程技术网

C# NHibernate比经典的ODBC驱动程序快吗?

C# NHibernate比经典的ODBC驱动程序快吗?,c#,sql,nhibernate,odbc,C#,Sql,Nhibernate,Odbc,我正在使用一种简单的数据模型开发一个应用程序(4个表,包括两个小表,大约有10行,两个大表,有数百行)。 我正在使用C#,目前在数据访问层使用OdbcDriver。 我想知道这个司机和NHibernate在性能方面是否有什么不同? 该应用程序可以正常工作,但我想知道安装NHibernate而不是经典的OdbcDriver是否会让它更快?如果是这样,那么安装NHibernate真的值得吗?(根据我从未使用过这种技术的事实) 谢谢 NHibernate并不是要让它变得更快,它的速度也会比像你一样只使

我正在使用一种简单的数据模型开发一个应用程序(4个表,包括两个小表,大约有10行,两个大表,有数百行)。 我正在使用C#,目前在数据访问层使用OdbcDriver。 我想知道这个司机和NHibernate在性能方面是否有什么不同? 该应用程序可以正常工作,但我想知道安装NHibernate而不是经典的OdbcDriver是否会让它更快?如果是这样,那么安装NHibernate真的值得吗?(根据我从未使用过这种技术的事实)


谢谢

NHibernate并不是要让它变得更快,它的速度也会比像你一样只使用数据库慢(它“在引擎罩下”使用它们)

在我看来,NHibernate希望创建一个可重用的实体层,它可以应用于不同的应用程序,或者至少可以在一个中大型应用程序的多个领域中重用。因此,将应用程序移动到NHibernate将是浪费时间(听起来很小)


通过为数据库引擎使用特定的datbase驱动程序,您可能会获得更好的性能。

对于数据库中的数据量,它不会产生任何影响。但通常使用NHibernate会降低应用程序性能,但会提高开发速度。但这通常适用于所有ORM。

简短回答:不,在大多数情况下,NHibernate实际上会降低您的性能

更详细的回答:NHibernate使用基本的ADO.NET驱动程序,包括OdbcConnection(如果没有更好的),来执行实际的SQL查询。最重要的是,它使用了大量的反射将查询摘要化为SQL,并将SQL结果转化为对象列表。这个额外的层虽然灵活且功能强大,但其执行速度将比基于DataReader的硬编码“firehose”解决方案慢


NHibernate可能给您带来更快性能的地方是“延迟加载”。假设你有一份人员名单,每个人都有一份电话号码列表。您正在从数据库中检索人员,只是为了获取他们的姓名。一个简单的基于DataReader的实现可能涉及为用户调用一个存储过程,其中包括一个连接到他们的电话号码的连接,在本例中您不需要这个连接。相反,NHibernate将只检索人,并在电话号码列表的引用中设置一个“代理”;当需要评估列表时,代理对象将执行另一个调用。如果不需要电话号码,则永远不会评估代理,从而省去了提取不需要的电话号码的麻烦。

一些提示:NHIbernate不是魔术。它位于ADO.NET之上。想要一个更快的司机吗?买一个。你为什么要使用ODbc这种过时的技术呢?你的数据来源是什么?他们不支持像OLEDB这样的新标准吗?

Odbc有性能问题吗?你打算做什么?NHibernate是一个O/RM工具,而不是数据库驱动程序。你不能只是从一个系统切换到另一个系统。我正在考虑切换到NHibernate,但我担心它实际上比当前的系统慢,根据每个人的回答,这似乎是事实。最后,我将考虑切换DB驱动程序,非常感谢您对这个非常有用的信息集!我纯逻辑地认为NHibernate应该更慢一些,你刚刚证实了我的担心,我将切换到另一种策略,然后应用程序与MySQL数据库一起工作。我刚开始做这个项目,最初是由一个使用ODBC进行数据库连接的实习生完成的。现在数据库比他使用的数据库大,查询开始需要3秒钟以上的时间,我正试图缩短时间并重构他的代码(我想使用NHibernate,因为我使用EclipseLink和Java,发现它很容易理解)。不幸的是,MySql驱动程序似乎不适用于.NET4,你有什么建议吗?好的,有两件事:(a)他应该使用OleDb,(b)驱动程序不更改数据库。你把车开进一百万排,司机不会让它变快的。服务器需要一个小时来处理一个错误的查询-同样,驱动程序不会让它更快。我建议,如果db的音量变慢,您可以对此进行调查。就像通常的罪犯一样。。。缺少索引。在这种情况下,您认为如果我只是从ODBC驱动程序迁移到OleDB会有用吗,或者这纯粹是浪费时间吗?它会给您一些东西,但它会很小(我仍然会这样做-ODBC在很长一段时间内不受支持)。最后,有人需要看看为什么数据库会比大小写得慢。这的确是浪费时间,谢谢你提出这一点,我会考虑另一种方法:你的说法根本不是真的。NHibernate和ORMs实际上会对开发速度产生影响,但与仅使用ADO.NET相比,不一定会加快开发速度。有了ORM,你必须学习框架和它的限制,并精心设计你的实体,然后使用它们来获取数据。您不必使用ADO.NET来实现这一点。第二次使用实体时,可能会加快开发速度,但不会太多。好处在于模型和逻辑的一致性。