我的问题与旧技术有关。然而,要获得彻底的答案对我来说很重要。 Visual Basic专家可以回复我或包含其他网站的链接,并阐明这个内存使用问题吗?我相信我在之前的帖子中没有清楚地草拟我的问题。
在电子商务网站页面上的自定义COM加上对象中考虑以下VB 6代码:
Dim globalArray(30, 100000)
'Assign long and short strings to the globalArray elements.
'Also some of the elements of globalArray hold smaller arrays. And also load the xml:
Set objGlobalDom = CreateObject("msxml2.FreeThreadedDomDocument.6.0")
objGlobalDom.loadXML (xmlStr)
Application.lock
Set Application("objGlobalDom") = objGlobalDom
Application("globalArray") = globalArray
Application.unlock
对于任何新会话,都会完成以下变量分配:
set Session("objGlobalDom") = Application("objGlobalDom")
session("globalArray") = Application("objGlobalDom")
假设Application("objGlobalDom")
将包含一个包含大约1000个节点的xml,每个节点占用大约3k的内存。假设数组将占用大约50兆的内存。
考虑VB6和COM对象:
我知道对象的每个实例都引用了对象的数据
我不明白的是:
如果session("objGlobalDom"
)不包含application("objGlobalDom")
的副本,为什么session("objGlobalDom")
数据的更改不会自动反映在application("objGlobalDom")
的数据中? session("objGlobalDom")
至Apllication("globalDom")
的引用仅用于阅读Application("objGlobalDom")
的数据吗?
根据Microsoft的说法,在我globalArray
示例的情况下,session("globalArray")
始终会获得Application("globalArray")
的副本,因此Microsoft不鼓励将数组分配给会话变量。但是我不清楚在COM对象和对象引用的情况下,set Session("objGlobalDom") = Application("objGlobalDom")
的赋值是否将数组复制到会话变量?