【发布时间】:2011-02-09 09:13:11
【问题描述】:
我正在努力提高现有 Asp.Net Web 应用程序的数据访问层的性能。风景如画。
- 它是 Asp.Net 中基于 Web 的应用程序。
- DataAccess 层使用 NHibernate 1.2 构建并公开为 WCF 服务。
- Entity 类用 DataContract 标记。
- 不使用延迟加载,并且由于关系的急切获取,内存中没有大量的数据库对象加载。对数据库的命中数也很高。例如,我使用 NHProfiler 对应用程序进行了概要分析,大约有 50 多个 sql 调用使用主键加载其中一个 Entity 对象。
- 我也不能像现有的实时应用程序那样更改代码,根本没有 NUnit 测试用例。
请问我可以在这里得到一些建议吗?
编辑 1:我尝试过使用延迟加载,但问题是由于实体也用作 DataContract,它会在序列化期间触发延迟加载。 使用 DTO 对象是一种选择,但这是一个巨大的变化,因为没有实体是巨大的。如果没有测试用例,这将需要大量的手动测试工作。
编辑 2:该项目是很久以前写的,没有编写单元测试的灵活性。例如 实体本身包含 CRUD 操作并使用 NHibernate Session。
class SampleEntity : ICrudOperation
{
//fields and properties
public IList<SampleEntity> Update()
{
//perform business logic (which can be huge and call the ICrudOperation of
//other entities
ISession session = GetSessionFromSomewhere();
session.Update(this);
}
}
这只是更新的一个例子。并且有大约 400 个相互依赖的实体。有没有办法为此编写单元测试
【问题讨论】:
-
当架构的每个方面都出错时,就很难提高性能。
-
@Justice:这里出了什么问题?我们可以列出来吗?还可以做些什么来改进它而不会对现有正在运行的应用程序产生太大影响。
-
NHibernate 非常适合作为 DAL 本身并直接在您的应用程序中使用。 NHibernate 不适合构建将作为 WCF 服务公开的 DAL,然后将在您的应用程序中使用这些 DAL。您遇到的问题是使用 NHibernate 错误的自然结果。
-
你为什么不会编写单元测试?在您开始之前,您不会以任何有意义的方式成功迁移您的架构和工具库,IMO
-
@Berryl:请参阅我的编辑 2。
标签: .net wcf performance nhibernate data-access-layer