gpt4 book ai didi

c++ - 如何缓存 1000 个大型 C++ 对象

转载 作者:太空宇宙 更新时间:2023-11-04 14:04:01 25 4
gpt4 key购买 nike

环境:Windows 8 64 位、Windows 2008 服务器 64 位Visual Studio(专业版)2012 64 位

列表L;//我的程序中有 1000 个大型 CMyObject 缓存,它们由我的 Windows 服务程序中的不同线程共享。

对于我们的 SaaS 中间件产品,我们在内存中缓存了 1000 个大型 C++ 对象(只读 const 对象,每个对象大小约为 4MB),这会导致系统内存不足。我们能否将磁盘文件(或其他由操作系统管理的持久性机制)关联到我们的 C++ 对象?不需要共享/进程间通信。

如果磁盘文件在进程(我们的 windows 服务程序)期间有效,就足够了。只读的 const C++ 对象由同一 Windows 服务中的不同线程共享。

我什至考虑使用对象数据库(如 mongoDB)来存储对象,然后在每次使用时加载/卸载这些对象。虽然比读取我们的序列化文件更快(希望如此),但它仍然会破坏性能。

目的是出于性能原因保留 C++ 对象的缓存,并避免每次都必须加载/卸载序列化的 C++ 对象。如果这个磁盘文件由操作系统管理并且需要对我们的代码进行最少的调整,那就太好了。

预先感谢您的回复。

最佳答案

唯一以您描述的方式由操作系统管理的是交换文件。您可以创建一个单独的应用程序(让它称为“缓存助手”),它将所有对象加载到内存中并等待请求。由于它不使用它的内存页面,因此操作系统最终会将这些页面置换到交换文件中,仅在需要时才调用它。与应用程序的通信可以通过命名管道或套接字完成。

这种方法的缺点是这种缓存的性能会非常不稳定,并且可能会降低整个服务器的性能。

我建议您编写自己的缓存算法/应用程序,因为您以后可能需要调整其属性。

关于c++ - 如何缓存 1000 个大型 C++ 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com