繁体   English   中英

WCF呼叫的内存何时分配?

[英]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. 呼叫服务器时
  2. 当我开始迭代列表时(我认为不太可能)
  3. 因为我需要每个实例

我认为是1或3,但是我不确定是哪一个。 有人知道吗?

(注意:我正在使用Visual Studio 2008和.net 3.5。我的客户端是Windows Mobile应用程序)

数组的分配在1处处理。代理与任何其他.NET对象一样。 数组无论如何都不是“透明的”,也不是稀疏的。

基本上,当数据从服务返回时,如果将其键入为数组,则该数组以及数组中的任何元素都将完全序列化/实现。

我的猜测是,数据分配在第一个myContractInstance.BigImage上。 这是因为MyContract是代理,但我不确定。

您可以通过注释掉foreach的内容并查看是否仍然得到异常来进行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM