所以,我有一个C#应用程序,其自定义类型层次结构是~4层深。
此分层存在是为了提供数据验证和更改事件传播的干净实现。
一个例子是:
DocumentNameValue -> NameValue - > StringValue -> BaseDataValue
。
系统工作正常,但考虑到所有间接层,性能冲浪者。从绝对意义上说,它并不是一个巨大的打击,但它确实加起来。
为了澄清,性能问题似乎是由于数据访问时发生的嵌套调用。
例如,调用DocumentNameValue.setValue("test.doc")
将导致每层层次结构对输入运行某些验证测试。这些从基地开始向上移动。沿途还发生了各种事件。如果有意义的话,该值实际上是“存储”在层次结构的基础上。
由于我所做的一切都是定义严格的类型层次结构,是否存在推荐的方法来执行以下任一操作:
总体目标是双重的:拥有特定于我的应用程序问题域的强类型,为我的验证规则提供一个干净的位置。
任何人都可以提供一些提示/建议吗?我做错了吗?
谢谢
答案 0 :(得分:3)
我的第一直觉是质疑你是如何知道这是你的表现受到影响的原因。你有没有运行过探查器?
我的第二个问题是要求代码样本。这个分层是通过OOP(继承)反映出来的吗?
根据我的理解,您使用不同的类型来表示不同的问题 - 这很好。你已经构建了类似ViewModel / Model / DataModel的东西,这是非常标准的。
鉴于您的评论,我建议您下载ANTS Performance Profiler的试用版并使用它来描述缓慢的实施;它会准确地告诉您哪些方法花费的时间最长,并且可以让您量化变化的结果。
除非应用程序非常简单,否则我不会建议拆分您的分层方法。学习如何干净地实施分层系统可以在以后获得理智。
答案 1 :(得分:1)
系统工作正常,但总的来说 间接层,性能层 冲浪者。从绝对意义上说,它不是一个 巨大的打击,但它确实加起来。
可能不是。你很可能需要重新审视这个假设。
经常这样做吗?
没有。因为没有必要。创建一个继承层次结构(与不继承另一个层次的类相比)并不会对庞大,庞大,庞大,压倒性的绝大多数应用程序中的性能产生重大影响。此外,如果您的项目是 因使用继承而受到有意义影响的项目,那么您可能已经使用托管语言做出了错误的决定。
答案 2 :(得分:0)
为了澄清,性能问题似乎是由于数据访问时发生的嵌套调用。
例如,调用DocumentNameValue.setValue(“test.doc”)将导致每层层次结构对输入运行某些验证测试。
您已经抽象到最大程度,因此失去了对数据访问的控制权。类型是否被展平不会改变发布的SQL或在数据库中花费的IO。
将数据访问移出抽象,或者在每个setter上遭受意外的IO成本。懒惰。