[英]When is memory from a WCF Call Allocated?
我打电话给返回大量数据的SOAP WCF服务。 调用Windows Mobile设备所能处理的不仅仅是更多。
但是我注意到有些奇怪。 当我拨打电话时,它看起来像这样:
MyContract[] myContractArray = MyService.CallToGetLotsOfDataObjects();
这不会失败。 但是,当遍历myContractArray
并将其放入客户端类时,它将失败。
起初我只是说,“好吧,它无法处理两个数据副本,这实在太多了”。 但是现在我想知道myContractArray
在上述调用之后是否真正保存了数据。 我想知道它是否类似于Linq-To-SQL调用,直到需要时才加载。
所以这是我的问题,在什么时候在客户端上分配数据?
// Create the service
var serviceLib = new MyServiceDataServiceLib();
// 1 -----------------+
// |
// V
MyContract[] myContractArray = serviceLib.WCFCallToGetLotsOfDataObjects();
List<MyClass> myClassList = new List<MyClass>()
// 3 -----------------+ +------------------ 2
// | |
// V v
foreach(MyContract myContractInstance in myContractArray )
{
MyClass myClassInstance = new MyClass();
myClassInstance.BigImage = myContractInstance.BigImage;
myClassInstance.MoreData = myContractInstance.MoreData;
myClassInstance.EvenMoreData = myContractInstance.EvenMoreData;
myClassList.Add(myClassInstance);
}
是在:
我认为是1或3,但是我不确定是哪一个。 有人知道吗?
(注意:我正在使用Visual Studio 2008和.net 3.5。我的客户端是Windows Mobile应用程序)
数组的分配在1处处理。代理与任何其他.NET对象一样。 数组无论如何都不是“透明的”,也不是稀疏的。
基本上,当数据从服务返回时,如果将其键入为数组,则该数组以及数组中的任何元素都将完全序列化/实现。
我的猜测是,数据分配在第一个myContractInstance.BigImage上。 这是因为MyContract是代理,但我不确定。
您可以通过注释掉foreach的内容并查看是否仍然得到异常来进行测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.