只是想问一下在.NET Framewok(C#)中使用具有300多个属性的对象的缺点(我的意思是内存或响应时间)。
我正在考虑将不同类中的属性分开,但我的问题是这些属性之间没有很大的关系。
我不会做任何复杂的计算,我只会填充instatiaded对象的属性并将他发送到另一个程序,这将把他送回去。
您的想法
EDIT
我在运行程序时只有一个对象。
答案 0 :(得分:10)
最大的缺点:可读性。
具有300个属性的类(我假设您的意思是属性,因为.NET属性具有特定的技术含义)太大而无法阅读和理解。如果如您所说,the attributes don't have a big relation between them
,您应该查看应该如何分解为更小类的相关项目。
您的描述:
我不打算做任何复杂的计算,我只是填充instatiaded对象的属性并将他发送到另一个程序,这将把他送回去。
这似乎表明需要在系统之间进行的DTO(数据传输对象) - 我会再次考虑,您应该考虑将对象分解为多个(因此,如果相关项目发生变化,则无需更改整个界面。)
答案 1 :(得分:1)
没有。我想不是。 Infragistics ultragrid已经超过了近千种属性和方法。而且它正常运行。 现在如果你将10个控件放在你的程序上怎么办?没有区别。 我认为如果您至少有1GB的内存空间,可以安全地假设您可以添加任意数量的内容,
这只是我的近似,你也可以拥有自己的近似值: 1个属性,平均250个字节(1个字符= 2个字节)所以,
1 073 741 824/250字节= 4 294 967.3属性
另外,您还可以将HD的虚拟内存作为备份。
答案 2 :(得分:0)
一个字:抽象
如果你有一个300个属性的巨大类,你的整个项目中只有一个大的抽象抽象。
你可能是唯一一个使用它的人,但可能多年后你必须回去改变一些你可能会感到困惑的东西。
下面这个类很好,但它可以保留一些功能。
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get; set; }
public char Gender { get; set; }
public string Social { get; private set; }
}
所有这些属性都可以在功能程序中使用,但您可以为自己提供更多功能。
以下示例经过重构,将Social抽象为自己的类SSN
:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get; set; }
public char Gender { get; set; }
public SSN Social { get; private set; }
}
public class SSN
{
public const int SSN_LENGTH = 9;
public string FirstThree { get; set; }
public string MiddleTwo { get; set; }
public string LastFour { get; set; }
public SSN(string ssn)
{
FirstThree = ssn.Substring(0, 3);
MiddleTwo = ssn.Substring(2, 2);
LastFour = ssn.Substring(5, 4);
}
public string ToString(bool format = false)
{
string formatDelimiter = "";
if (format)
{
formatDelimiter = "-";
}
return FirstThree + formatDelimiter + MiddleTwo + formatDelimiter + LastFour;
}
}
通过将Social out抽象为SSN
课程,我现在可以在社会安全号码上获得更多控制权和附加功能。当我在他们社交的最后四个人中寻找一个人时,我可以轻松地使用以下代码:
string lastFour = "0000";
List<Person> Persons = new List<Person>();
Person foundPerson = Persons.Where(x => x.Social.LastFour == lastFour).First();
这只是一个小例子,它可以扩展到更复杂的部分。这将为系统提供更好的功能,并且也更容易理解。