Когда выделяется память из вызова WCF? - PullRequest
1 голос
/ 19 октября 2010

У меня есть вызов службы 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)

Ответы [ 2 ]

1 голос
/ 19 октября 2010

Распределение для массива обрабатывается в 1. Прокси-сервер, как и любой другой объект .NET.Массив ни в коем случае не «прозрачен» и не является разреженным.

В основном, когда данные возвращаются из службы, если они типизируются как массив, массив, а также любые элементымассив полностью сериализован / материализован.

0 голосов
/ 19 октября 2010

Я предполагаю, что данные размещаются в первом myContractInstance.BigImage. Это может быть связано с тем, что MyContract является прокси-сервером, но я не уверен.

Вы можете проверить это, закомментировав содержимое foreach и выяснив, получаете ли вы по-прежнему исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...