因此,在下面的代码中,我非常喜欢方案一的详细内容,但我想知道与方案二相比,这会带来多大的性能影响.循环中的实例化是一个大问题吗?
句法上的好处(我喜欢,有些人甚至不同意它是冗长的或最优的)是否值得称之为性能?您可以假设集合仍然相当小(N <几百).
// First scenario
var productCategoryModels = new List<ProductCategoryModel>();
foreach (var productCategory in productCategories)
{
var model = new ProductCategoryModel.ProductCategoryModelConverter(currentContext).Convert(productCategory);
productCategoryModels.Add(model);
}
// Second scenario
var productCategoryModels = new List<ProductCategoryModel>();
var modelConvert = new ProductCategoryModel.ProductCategoryModelConverter(currentContext);
foreach (var productCategory in productCategories)
{
var model = modelConvert.Convert(productCategory);
productCategoryModels.Add(model);
}
Run Code Online (Sandbox Code Playgroud)
我很乐意听到你们这些人的想法,因为我经常看到这一点.
我会稍微改变一下这个问题.如果发生的事情在new ProductCategoryModel.ProductCategoryModelConverter(currentContext)循环期间没有改变,我认为没有理由将它包含在循环中.如果它不是循环的一部分,它不应该在那里imo.
如果你只是因为它看起来更好而包含它,你就会强迫读者弄清楚它是否有所作为.
像Brian一样,如果你没有真正改变它,我认为没有理由创建一个新实例 - 我假设这Convert不会改变原始对象?
我建议使用LINQ完全避免循环(就你自己的代码而言):
var modelConverter = new ProductCategoryModelConverter(currentContext);
var models = productCategories.Select(x => modelConverter.Convert(x))
.ToList();
Run Code Online (Sandbox Code Playgroud)
在性能方面,它取决于ProductCategoryModelConverter构造函数必须做什么.就开销而言,创建一个新对象非常便宜.当然,这不是免费的 - 但我不认为这会在大多数情况下造成瓶颈.但是,我会说在循环中实例化它会向读者暗示它是必要的; 有一些理由不使用单个对象.一个转换器肯定听起来就像它的工作一样会保持不变......所以我会被实例化的循环版本所困惑.
| 归档时间: |
|
| 查看次数: |
798 次 |
| 最近记录: |