随时间保存值的方法 - c#

我有一个任务,我知道该如何编码(在C#中),
但我知道简单的实现无法满足我的所有需求。
因此,我正在寻找可以满足我所有需求的技巧。

我正在编写一个包含N个随时间进行交互的实体的模拟。
N将在30左右开始,然后增加到数千。

a. The number of entities will change during the course of the simulation.

b。我希望这将要求每个实体都有其自己的跟踪文件。
每个实体至少具有20个参数,最多可达数百万个;我想随着时间的推移进行追踪。

一个。这很可能要求我们不能始终将所有值都保留在内存中。一些子集应该没问题。

b。每个实体的参数数量最初将是固定的,但我可以想到一些测试,该测试会使参数的数量随着时间的推移而变化缓慢。
仿真将持续数百万个时间步,因此我需要保留每个参数的每个值。
这些跟踪将用于以下用途:

一个。从当前时间步到过去以固定的时间量绘制参数的子集(可配置)。

i.  Normally on the order of 300 time steps.

ii. These plots are in real time while the simulation is running.

b。我将使用这些踪迹来重播模拟,因此我需要在给定的时间步长快速访问所有参数,以便可以快速移至模拟中的其他时间。

i.  This requires the values be stored in a file(s) which can be inspected/loaded after restarting the software.

ii. Using a database is NOT an option.

C。我将使用这些参数进行后续分析,但我无法预先定义这些参数,因此需要一个更灵活的系统。

我最初的想法:

每个实体一个类,其中包含所有参数。
由内存映射文件支持。
只有固定但移动的文件量被映射到主存储器
第二个内存映射文件将时间索引保存到主文件,以便在重播模拟过程中更快地进行访问。这可能非常重要,因为每个实体文件将代表整个模拟的不同时间段。

参考方案

亲吻-只需为每个实体编写一个日志文件,然后在每个时间片上按指定顺序写出每个参数(因此,通过添加参数名称,不会使日志文件的大小增加一倍)。如果要指定每列的参数名称和实体标识,则可以在每个日志文件中都有一个标头。

如果在仿真过程中有许多参数值保持固定或缓慢变化,则可以将其写出到另一个文件中,该文件仅对参数值的更改进行编码,而不对每个时间片的每个值进行编码。

您可能应该同步日志记录,以便用相同的时间值写出每个日志条目。而不是通过中央文件进行协调,只需将文件每行中的第一个值设为时间值即可。

忘记数据库-太慢了,太多了,无法进行模拟重播。要重放仿真,您只需要顺序访问每个时间片,只需简单地逐行读取文件中的行,便可以最高效,最快地实现该访问。

由于相同的原因-速度和空间效率-忘记了XML。

Wordpress the_permalink性能与将值存储在变量中 - php

制作新主题和创建具有链接到所述文章的多个对象的文章视图的最有效方法是什么?我是C#专业人士,但是在PHP中我并不如我所愿。假设您有:while(have_posts()) <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?>…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可

LeetCode题解圆上任取三点构成锐角三角形的概率

来自字节跳动的一道几何题题解:1/4