【问题标题】:Pros/Cons to increasing the scope of a repository instance?增加存储库实例范围的优点/缺点?
【发布时间】:2009-03-19 23:24:28
【问题描述】:

这个问题的标题写得不太好。对不起。

我很好奇将方法中的对象实例的范围扩大到类级别有什么优点或缺点。

作为一个具体示例,我有一个非静态服务类,它封装了对存储库类的访问,该存储库类用于管理 CRUD 活动以及一些不一定与其他业务逻辑很好地混合的其他任务。在我构建它时,每个方法都会创建它自己的存储库实例。假设平均流量(不是很大),我想知道在服务类的构造函数中创建此存储库的类级别实例是否有任何好处,而不是我目前使用的方法级别范围。此应用程序当前未使用 DI,尽管这可能是一个选项。我也在考虑将课程设为静态,但在此之前我还有一些其他障碍需要克服。

提前致谢。

【问题讨论】:

    标签: c# asp.net performance


    【解决方案1】:

    您的代码甚至还不能运行,而您已经在优化。停止!让您的代码工作,然后分析性能并针对您实际遇到的性能问题进行优化,而不是您认为可能会遇到的问题。

    不要猜错并解决错误的问题,否则会使事情变得更糟!

    【讨论】:

    • 这绝对是个好建议。我希望养成好习惯或改正坏习惯,这就是问题的真正意图(试图衡量其他更有经验的开发人员在做什么)。
    【解决方案2】:

    +1 到John Saunders

    除此之外,让我评论一下:

    我想知道在服务类的构造函数中创建此存储库的类级别实例是否有任何好处,而不是我当前使用的方法级别范围

    创建存储库类是否昂贵? “昂贵”是指有一个分析器向您展示它对您的应用程序的运行时间做出了显着的贡献。

    如果是这样,您可能希望将其缓存在实例变量中。如果没有,请将其保留在本地。一旦你将它提升为一个实例变量,你就会给自己带来许多问题,例如

    • 谁先创建它?
    • 当 2 个线程访问同一个实例时会发生什么?
    • 谁来清理它?有没有人? (using 语句不再是一个选项)
    • 这是否意味着您需要为您的课程编写终结器? (呃)
    • 如果创建它需要参数,谁来提供?
    • 如果需要在方法调用之间更改或重新创建它会怎样?

    旧的“全局变量是邪恶的”引用是恕我直言,只是“共享状态是邪恶的”最常见的情况,这是实际问题。

    【讨论】:

    • 这就是我一直在寻找的,如果我在课堂上全球化存储库可能会出现的例子。将它添加到约翰的回复中,我就有了我需要的东西。我还没有到针对分析器运行它的程度,但是随着我的进展,我会这样做。再次感谢小伙伴们的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    相关资源
    最近更新 更多