Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 构建可伸缩的服务器_C#_.net_Scalability_Out Of Memory - Fatal编程技术网

C# 构建可伸缩的服务器

C# 构建可伸缩的服务器,c#,.net,scalability,out-of-memory,C#,.net,Scalability,Out Of Memory,因此,我正在开发一个服务器应用程序,它必须存储数十万(在某些情况下多达几百万)的类,将它们序列化到SQL数据库,并将它们加载回多次,而将这么多的类对象存储到一个列表似乎是引发内存不足异常的原因?我想 这就带来了问题 在处理我的大约一百万个类的同时,如何避免这些错误 拥有这么多数据是否会带来其他问题 我还可以做些什么来确保我的服务器是完全可伸缩的,并最终能够处理和管理尽可能多的数据 这个问题的重点是,我需要这么多的类都在内存中运行,因为我需要不断地更新它们,这样做的时间比我想序列化到SQL数据

因此,我正在开发一个服务器应用程序,它必须存储数十万(在某些情况下多达几百万)的类,将它们序列化到SQL数据库,并将它们加载回多次,而将这么多的类对象存储到一个列表似乎是引发内存不足异常的原因?我想

这就带来了问题

  • 在处理我的大约一百万个类的同时,如何避免这些错误
  • 拥有这么多数据是否会带来其他问题
  • 我还可以做些什么来确保我的服务器是完全可伸缩的,并最终能够处理和管理尽可能多的数据

这个问题的重点是,我需要这么多的类都在内存中运行,因为我需要不断地更新它们,这样做的时间比我想序列化到SQL数据库的时间要长。现在,目前,我使用的内存比我最终需要的更少

首先,显而易见的一点是:确保你有足够的内存。分析代码,找出(大约)在同一时间内存中有多少个对象,然后使用内存分析器。见这一相关问题:

其次,如果你真的需要数以百万计的对象,重新考虑你的设计可能是有意义的。在许多情况下,像大型多维数组这样简单的东西可能比复杂的.net类树更有效(而且在内存方面更可预测)。无论这个建议是否适用于你的情况,我无法用手头的数据来说明


第三,如果不需要同时在内存中保存所有这些数据,那么就不要这样做。如今,SQL数据库速度非常快(并且使用智能缓存机制),因此在列表中只包含当前需要的对象(而不是将所有内容加载到内存中)可能是有意义的。此外,在SQL数据库索引中搜索可能比遍历一个巨大的内存列表还要快。

您可能指的是对象,而不是类;-)

可扩展的处理体系结构通常包括以下内容:

在任何时候,内存中只有有限数量的对象(可以是一个,可以是十个,可以是一百个,但如果必须是“我需要多少”,那么你必须重新考虑你的设计)。这确保了您永远不会耗尽内存,因为最大内存使用量是固定的

所有对象都存储在数据库中。当您需要一个不在内存中的对象时,请从数据库中加载它。除非它是前面提到的对象短列表的一部分,否则不要将其保留

要利用短列表未使用的内存,请在代码和数据库之间插入一个缓存层,这样,如果最终多次获取同一对象,那么这样做的成本就会降低。缓存策略意味着只有在内存可用的情况下,软件才会以内存换取速度

试着使用一些小事务进行工作,这些事务读取一些内容,写回一些内容,然后重新开始。这有助于您的软件在处理过程中发生崩溃或停机时从原来的位置恢复。数据库应该足够从它离开的地方重新开始


通过处理独立事务,可以让多个工作进程(在同一台计算机上或在计算网格上)在同一个数据库上工作。如果可以的话,实现基于事务工作者的模型对于性能来说是非常好的,并且可以更轻松地让更多的计算机处理这个问题。

缓存一些经常被读入Memcached之类内容的数据库数据可能是值得的

你能添加你正在使用的数据结构吗?通过一些智能优化,很可能将数据消耗量减少一半(完全猜测)。您的设计有问题。@Will-除了明显的内存不足异常之外,这要视情况而定。如果他正在构建一个服务,该服务旨在为所有这些数据提供内存之外的服务,那么一般方法可能没有那么大的问题,实际上可能需要它。我有一个类似的应用程序。。。但是64位。获取数百万对象的动态更新。。。都很活跃。IO将更改写入数据库,但我必须将活动副本保留在内存中。我扫描multipel source,其中一个有大约160万个项目,每秒处理大约400.000个更新。