【发布时间】:2010-11-22 02:55:16
【问题描述】:
我有表和许多可与 sql 数据库一起使用的复杂程序。
出于演示目的,我想从我的 sql 表中将数据加载到内存中(也许我可以将其存储在会话中的数据集 - 演示是有限的,因此服务器内存上限不会成为问题?)并使用我的存储过程对其进行操作。
有可能吗?或者我需要重写我所有的存储过程,甚至用适用于数据集的代码替换它们?
【问题讨论】:
标签: c# asp.net sql-server-2005
我有表和许多可与 sql 数据库一起使用的复杂程序。
出于演示目的,我想从我的 sql 表中将数据加载到内存中(也许我可以将其存储在会话中的数据集 - 演示是有限的,因此服务器内存上限不会成为问题?)并使用我的存储过程对其进行操作。
有可能吗?或者我需要重写我所有的存储过程,甚至用适用于数据集的代码替换它们?
【问题讨论】:
标签: c# asp.net sql-server-2005
如果您希望 SQL Server 在内存中管理您的表,则无法保证。
您可以创建一个表变量并用数据集填充它,它可能会存储在内存中。
查看此答案以获取更多信息:
Does MS-SQL support in-memory tables?
此外,通过一些服务器配置,您可以将 tempdb 放入 ramdisk,这将有效地让您不仅可以使用表变量和希望进行操作,还可以将数据集存储在临时表中并确保它将在 RAM 中。查看这篇微软的文章:
http://support.microsoft.com/?scid=kb;en-us;917047&x=17&y=9
编辑:我希望如果数据集适合服务器内存(以及它们配置的每个进程限制),它将存储在服务器的内存中。但这只是一个有根据的猜测,因为我不熟悉 ASP.NET 的架构
【讨论】:
理论上,您可以将整个数据库加载到内存中,甚至可以为每个会话存储一份数据库副本。这是否是一个合理的事情,是一个不同的讨论。我听说的所有成功的 ASP 应用程序都是无状态的。
绝对不可能让 SQL Server 通过 Transact-SQL 过程或任何其他技术来操作 ADO.Net 数据集所在的进程内存。您将不得不在 ASP.Net 应用程序中将所有过程重写为 CLR 方法,以便对 ADO.Net 数据集进行操作。
【讨论】:
您是否考虑过像 SQLite 这样的内存数据库?在这个 SO 线程中查看 my answer。还有其他选择。
【讨论】:
存储过程存储在数据库中。没有办法让它们中的一个,一直在 DB 服务器中,在 Web 服务器上的一些内存结构上运行——一个完全不同的地方!
您要求做的有点像说您点了一份比萨饼,现在它已送到您家,您希望比萨饼店在不离开您家的情况下即时为您更换外皮.如果没有一些非常先进的技术可以选择性地扭曲时空连续体,甚至可能影响时间旅行,这将永远不会发生。
如果您必须在披萨到家后更换披萨,您要么必须订购新披萨,要么使用自己的工具自行修改。
【讨论】:
事实上,你可以做到。这很愚蠢,但有可能。
说到比萨,这就像订购所有可能的配料,从多米诺送到你家,你打开所有盒子,重新排序,然后把所有东西送回多米诺,让你做你想要的比萨。
祝你好运:D
【讨论】: