Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
在ASP.Net中存储大型全局对象的最佳方式是什么_.net_Caching - Fatal编程技术网

在ASP.Net中存储大型全局对象的最佳方式是什么

在ASP.Net中存储大型全局对象的最佳方式是什么,.net,caching,.net,Caching,我的项目要求我创建一个数据库对象,一个包含表列表的自定义类,每个表包含列列表。columns and tables对象具有数据库中不可用的特定属性。例如标签、最大值、最小值等 所有这些自定义属性都存储在数据库表中,用户可以修改这些表。这些属性将在各种web表单中使用 我的问题是:明智的做法是保持与数据库的连接,找出每个表单的这些扩展属性,或者如上所述创建一个对象,将所有表、列存储为列表,并将该大对象存储为应用程序变量 我还考虑将对象放入缓存,并在用户更改扩展属性时使其过期 有人能告诉我以上三种方

我的项目要求我创建一个数据库对象,一个包含表列表的自定义类,每个表包含列列表。columns and tables对象具有数据库中不可用的特定属性。例如标签、最大值、最小值等

所有这些自定义属性都存储在数据库表中,用户可以修改这些表。这些属性将在各种web表单中使用

我的问题是:明智的做法是保持与数据库的连接,找出每个表单的这些扩展属性,或者如上所述创建一个对象,将所有表、列存储为列表,并将该大对象存储为应用程序变量

我还考虑将对象放入缓存,并在用户更改扩展属性时使其过期

有人能告诉我以上三种方法中最好的是哪一种,还是其他方法来确保最佳性能

谢谢

编辑:这必须是适用于任何数据库的通用解决方案。因此,可能会有大量表50-120,每个表有10-30列


Edit2:我也在考虑像Entity framework那样动态创建类,并使用反射加载它们。

由于您只缓存元数据而没有数据,所以要存储的量相对较小

在我看来,你有两个选择:

存储在应用程序对象中,该对象可用于所有会话,不会过期,但在重置应用程序池之前将一直存在 存储在缓存条目中,该条目允许您设置将来的过期或数据库依赖项,以便刷新数据。 既然您说用户可以更改数据,那么具有数据库依赖关系的缓存看起来是正确的选择,尽管该类仅直接支持此选项,因此仅适用于SQL Server


一种更通用的方法是缓存过期,并在过期时对数据库进行轮询。

我们说的是多大?有多少个表/列/属性?@alastair它可以运行到几十个表中,每个表有20-30列。我们谈论的是多少行?数以百万计的?几千?较少的更多?@Oded,此对象将不存储任何表数据。如前所述,我有10个表,每个表有12列,DB对象有一个表对象列表,每个表对象有一个列列表,每个列列表有12列对象。我只存储数据库对象的元数据,如列标签、最大值、最小值、默认值、文本框宽度、,etc@Oded,不,只是列和表定义Hanks Oded,在运行时动态创建具有所有必需属性的类,然后使用反射加载它们有什么好处吗?@Arun-如果用例需要的话。我看不出这对您的情况有什么帮助。@Oded只是想减少内存占用,我只是担心一旦表和列的数量增加,这个对象可能会变得巨大-@Arun-如果您的内存中只有一个实例,那么您应该开始担心它会占用大量内存。元数据本身不应该做到这一点。访问数据的速度如何?从编译对象中读取值的速度比从大列表中读取变量的速度快。