Glimpse MVC3 исчезает для страницы ViewMOdel

У меня есть представление, строго типизированное для модели представления, и оно начало работать очень медленно с тех пор, как сегодня утром я обновил код. Я установил Glimpse MVC, чтобы посмотреть, смогу ли я лучше понять, что может происходить. Glimpse работает на каждой странице, кроме страницы ViewModel — вкладка исчезает без вывода какой-либо информации.

Мой файл журнала Glimpse говорит:

2012-06-22 13:50:29.5831|INFO|Glimpse.Core.Module|BeginRequest handling complete for requestId 64d0e726-a756-4c1a-a9c4-629231948aa2 (/SurveyResponse/Results)|
2012-06-22 13:50:29.5851|WARN|Glimpse.Mvc3.Plugin.Execution|get_Binders method of System.Web.Mvc.ControllerActionInvoker type is not proxyable.|
2012-06-22 13:50:29.5851|WARN|Glimpse.Mvc3.Plugin.Execution|set_Binders method of System.Web.Mvc.ControllerActionInvoker type is not proxyable.|
2012-06-22 13:50:29.5851|WARN|Glimpse.Mvc3.Plugin.Execution|GetType method of System.Web.Mvc.ControllerActionInvoker type is not proxyable.|
2012-06-22 13:50:29.6101|WARN|Glimpse.Mvc3.Plugin.Execution|MemberwiseClone method of System.Web.Mvc.ControllerActionInvoker type is not proxyable.|
2012-06-22 13:50:30.5192|INFO|Glimpse.Core.Module|PostRequestHandlerExecute handling complete for requestId 64d0e726-a756-4c1a-a9c4-629231948aa2 (/SurveyResponse/Results)|
2012-06-22 13:50:30.5212|INFO|Glimpse.Core.Module|PostReleaseRequestState handling complete for requestId 64d0e726-a756-4c1a-a9c4-629231948aa2 (/SurveyResponse/Results)|
2012-06-22 13:50:30.5462|WARN|Glimpse.Core.Plumbing.GlimpseSerializer|Serializer error|System.ObjectDisposedException--The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.--   at System.Data.Objects.ObjectContext.EnsureConnection()
   at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   at System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator()
   at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Newtonsoft.Json.Serialization.JsonArrayContract.CreateWrapper(Object list)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContract collectionValueContract)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.WriteMemberInfoProperty(JsonWriter writer, Object memberValue, JsonProperty property, JsonContract contract)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContract collectionValueContract)
2012-06-22 13:50:30.5602|WARN|Glimpse.Core.Plumbing.GlimpseSerializer|Serializer error|System.ObjectDisposedException--The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.--   at System.Data.Objects.ObjectContext.EnsureConnection()
   at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   at System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator()
   at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Newtonsoft.Json.Serialization.JsonArrayContract.CreateWrapper(Object list)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContract collectionValueContract)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.WriteMemberInfoProperty(JsonWriter writer, Object memberValue, JsonProperty property, JsonContract contract)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContract collectionValueContract)
2012-06-22 13:50:30.5602|INFO|Glimpse.Core.Module|Glimpse JSON payload created for requestId 64d0e726-a756-4c1a-a9c4-629231948aa2 (/SurveyResponse/Results)|
2012-06-22 13:50:30.5702|INFO|Glimpse.Core.Module|Glimpse output generated for requestId 64d0e726-a756-4c1a-a9c4-629231948aa2 (/SurveyResponse/Results)|
2012-06-22 13:50:30.5702|INFO|Glimpse.Core.Module|RequestId 64d0e726-a756-4c1a-a9c4-629231948aa2 (/SurveyResponse/Results) persisted|
2012-06-22 13:50:30.5702|INFO|Glimpse.Core.Module|EndRequest handling complete for requestId 64d0e726-a756-4c1a-a9c4-629231948aa2 (/SurveyResponse/Results)|
2012-06-22 13:50:30.6272|INFO|Glimpse.Core.Module|BeginRequest handling complete for requestId 44be221e-a7e2-4ac7-bd4c-29ae2b9ad12f (/Glimpse.axd)|
2012-06-22 13:50:30.6422|WARN|Glimpse.Core.Validator.GlimpseRequestValidator|Glimpse.Core.Validator.ContentTypeValidator invalided request (it will now be ignored) with id 44be221e-a7e2-4ac7-bd4c-29ae2b9ad12f (/Glimpse.axd)|
2012-06-22 13:50:30.6482|WARN|Glimpse.Core.Validator.GlimpseRequestValidator|Glimpse.Core.Validator.ContentTypeValidator invalided request (it will now be ignored) with id 44be221e-a7e2-4ac7-bd4c-29ae2b9ad12f (/Glimpse.axd)|
2012-06-22 13:50:30.6482|WARN|Glimpse.Core.Validator.GlimpseRequestValidator|Glimpse.Core.Validator.ContentTypeValidator invalided request (it will now be ignored) with id 44be221e-a7e2-4ac7-bd4c-29ae2b9ad12f (/Glimpse.axd)|
2012-06-22 13:50:30.6642|WARN|Glimpse.Core.Validator.GlimpseRequestValidator|Glimpse.Core.Validator.ContentTypeValidator invalided request (it will now be ignored) with id 44be221e-a7e2-4ac7-bd4c-29ae2b9ad12f (/Glimpse.axd)|

Код, который вызвал низкую производительность, добавлял эти операторы Select внутри моей группы по запросу:

 var data = from SurveyResponseModel in db.SurveyResponseModels
                       group SurveyResponseModel by SurveyResponseModel.MemberId into resultCount
                       select new ResultsViewModel()
                       {
                           MemberId = resultCount.Key,
                           PatientFollowUpResult = db.SurveyResponseModels.Count(r => r.PatientFollowUp),
                           ChangeCodingPracticeResult = db.SurveyResponseModels.Count(r => r.ChangeCodingPractice),

                           ChangesOthersResult = resultCount.Select(r => r.ChangesOthers),

                           YesBarriersOthersResult = resultCount.Select(r => r.YesBarriersOthers),

                           AddressBarriersOthersResult = resultCount.Select(r => r.AddressBarriersOthers),
                           TotalResponsesResult = db.SurveyResponseModels.Count(),
                       };

person user547794    schedule 22.06.2012    source источник
comment
Почему бы вам не показать нам фрагмент кода, который вы изменили?   -  person EkoostikMartin    schedule 22.06.2012
comment
Хорошо, добавлен код медленной загрузки.   -  person user547794    schedule 22.06.2012
comment
Я бы рекомендовал повторно опубликовать вопрос или переименовать и отредактировать вопрос, чтобы подчеркнуть, что фактическая проблема заключается в медленном выполнении запроса linq-to-entities. Немного о MVC и взгляде, я не думаю, что это имеет какое-либо отношение к вашей реальной проблеме.   -  person EkoostikMartin    schedule 22.06.2012
comment
Кроме того, вы пробовали SQL профилировать выполнение запроса linq?   -  person EkoostikMartin    schedule 22.06.2012
comment
Я использую SQL Compact и не думал, что это возможно. Есть ли возможность сделать это?   -  person user547794    schedule 22.06.2012
comment
Uff SQL CE, нет, на самом деле, нет отличного способа его профилировать. Почему вы используете SQL CE для веб-приложения?   -  person EkoostikMartin    schedule 22.06.2012
comment
Ты знаешь что ты прав. Я должен просто переключиться на SQL Server 2008R2 и избавить себя от потенциальной головной боли.   -  person user547794    schedule 22.06.2012
comment
Кроме того, SQL CE не является потокобезопасным и поддерживает до 256 одновременных подключений, что не является хорошей базой данных для веб-приложения.   -  person EkoostikMartin    schedule 22.06.2012


Ответы (1)


Я бы сказал, что здесь происходит то, что Glimpse запускает ленивую загрузку свойства в вашей модели. К сожалению, в настоящее время Glimpae не поддерживает этот случай. Чтобы проверить, так ли это, попробуйте отключить вкладку просмотра и посмотреть, есть ли у вас такая же проблема.

person anthonyv    schedule 23.06.2012