|
|
1
3
您可能是指对象,而不是类;-) 可扩展的处理体系结构通常包括以下内容: 在任何时候,内存中的对象数量都是有限的(可能是一个,可能是十个,可能是一百个,但是如果必须是“我需要多少”,那么你必须重新考虑你的设计)。这样可以确保永远不会耗尽内存,因为最大内存使用量是固定的。 所有对象都存储在数据库中。当需要一个不在内存中的对象时,从数据库中加载它。除非它是前面提到的对象短列表的一部分,否则不要把它放在周围。 为了利用短列表中未使用的内存,在代码和数据库之间插入一个缓存层,这样,如果您最终大量获取同一对象,那么这样做的成本将会降低。缓存策略意味着只有在内存可用的情况下,软件才会以内存换速度。 尝试使用读一些东西的小事务,写一些东西回来,然后重新开始。这有助于您的软件在处理过程中发生崩溃或停机时从其离开的位置恢复。数据库应该足够从它离开的地方重新启动。 通过处理独立事务,可以让多个工作进程(在同一台计算机上或在计算网格上)在同一个数据库上工作。如果可以的话,实现一个基于事务性工作者的模型对于性能来说是很好的,并且可以让更多的计算机更容易地处理这个问题。 |
|
|
2
0
首先,显而易见的是:确保有足够的内存。分析代码以找出(大约)同时在内存中有多少对象,然后使用内存分析器。请参阅此相关问题: How much memory does a C#/.NET object use? 其次,如果您真的需要数百万个对象,重新考虑您的设计可能是有意义的。在许多情况下,一些简单的东西,比如一个大的多维数组 可以 比复杂的.NET类树效率更高(而且更容易预测内存)。不管这个建议是否适用于你的案件,我不能用手头的数据来说明。 第三,如果不需要将所有这些数据存储在内存中 同时 ,那就不要这样做。目前,SQL数据库速度相当快(并且使用智能缓存机制),因此只有列表中当前需要的对象(而不是将所有内容加载到内存中)可能是有意义的。此外, 搜索 通过一个SQL数据库索引甚至可能比遍历一个巨大的内存列表更快。 |
|
|
3
0
它可能值得缓存一些经常被读取到类似memcached的数据库数据。 http://en.wikipedia.org/wiki/Memcached |