【发布时间】:2011-09-07 08:12:54
【问题描述】:
假设我有一个相对较大的对象MyObjectModel 列表,名为MyBigList。 MyObjectModel 的属性之一是名为 ObjectID 的 int。理论上,我认为MyBigList 的大小可以达到 15-20MB。我的数据库中还有一个表,其中存储了有关此列表的一些标量,以便以后可以对其进行重组。
什么会更有效率?
选项 A:
List<MyObjectModel> MyBigList = null;
MyBigList = GetBigList(some parameters);
int RowID = PutScalarsInDB(MyBigList);
选项 B:
List<MyObjectModel> MyBigList = null;
MyBigList = GetBigList(some parameters);
int TheCount = MyBigList.Count();
StringBuilder ListOfObjectID = null;
foreach (MyObjectModel ThisObject in MyBigList)
{
ListOfObjectID.Append(ThisObject.ObjectID.ToString());
}
int RowID = PutScalarsInDB ( TheCount, ListOfObjectID);
在选项 A 中,我将 MyBigList 传递给一个函数,该函数从列表中提取标量,将它们存储在数据库中并返回创建这些条目的行。在选项 B 中,我将 MyBigList 保留在我提取标量的页面方法中,然后将它们传递给 PutScalarsInDB 函数。
什么是更好的选择,可能是另一个更好的选择?我担心传递这种大小和内存使用量的对象。
【问题讨论】:
-
对于每种情况,方法
PutScalarsInDB内部会发生什么?您是在问哪种方法提取标量是否会有所不同? -
@both,它在数据库中创建一行,存储 1) 包含列表中 ObjectID 列表的字符串,2) 列表中对象的数量,3) 包含在生成列表的查询中使用的参数,4) 用户 ID。创建行后,它会返回该行。
-
据我了解,这两种技术的结果相同。唯一的区别在于你在哪里工作。如果是这种情况,那么运行时将不会有可检测的差异。两者都不比另一个“更有效”。你如何编码是一个风格问题,而不是运行时性能问题。
标签: c# asp.net performance large-data-volumes