OutOfMemoryException с объектом EntitySet (local db) в PhoneApplicationService.Current.State on OnActivate - PullRequest
1 голос
/ 16 января 2012

Я получаю исключение OutOfMemoryException при выходе из неактивного состояния, когда объект, в котором есть EntitySet, сохраняется в состоянии приложения.Вот пример кода.

var list = new TaskList() { Title = "AA" };
list.TaskItems = new EntitySet<TaskItem>();
list.TaskItems.Add(new TaskItem() { Notes = "BB" });            
PhoneApplicationService.Current.State["CurrentList"] = list;//Fails only when resuming
var list1 = (TaskList)PhoneApplicationService.Current.State["CurrentList"]; // WORKS FINE
//PhoneApplicationService.Current.State["CurrentList"] = "AnyString" //Works fine; 

Теперь я нажимаю «Старт» и ухожу из приложения.Затем я нажимаю кнопку «Назад», в результате чего он выходит из неактивного состояния, на некоторое время он говорит «Возобновление», и через некоторое время я получаю исключение OutOfMemory.

Когда я сохраняю и извлекаю объект из «State», он работает нормально.Выдает исключение только при «Возобновлении».Кто-нибудь знает почему?Есть ли обходной путь?

Ответы [ 2 ]

1 голос
/ 17 января 2012

Я отвечаю на свой вопрос.У меня была Циркулярная ссылка между TaskList и объектом TaskItem, который потерпел неудачу во время десериализации.Я думал, что это не удалось из-за EntitySet и задал этот вопрос.Извините за это.

0 голосов
/ 16 января 2012

В коде вы показываете, что вы сохраняете CurrentList в состояние приложения, когда приложение выходит из неактивного состояния.Я думаю, что вы должны сохранить в состояние приложения, когда вы надеваете, не возобновляя.

Неактивный

Когда пользователь перемещается вперед, вне приложения, после возникновения события «Деактивировано», операционная система пытается перевести приложение в неактивное состояние.В этом состоянии все потоки приложения останавливаются, и никакая обработка не выполняется, но приложение остается неповрежденным в памяти.Если приложение повторно активируется из этого состояния, приложению не нужно повторно создавать какое-либо состояние, поскольку оно было сохранено.

Если новые приложения запускаются после того, как приложение стало неактивным, и эти приложения требуютбольше памяти, чем доступно для обеспечения хорошего взаимодействия с пользователем, операционная система начнет захоронение неактивных приложений, чтобы освободить память.

http://msdn.microsoft.com/en-us/library/ff817008(v=vs.92).aspx

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