Gaurav_Chaudhary Ответов: 0

Получение "system.outofmemoryexception" иногда в system.globalization.calendardata.nativegetcalendardata


Это функция C#, которая выбрасывает случайные
'System.OutOfMemoryException'
,

public string GetFormattedDate(string datetoparse, string format = "MM/dd/yyyy")
       {

           DateTime dt;
           string parsedDate = "";
           string[] otherValidFormats = CommonFunction.BindEnum(typeof(Enums.ValidDateFormat)).Select(x => x.Value).ToArray<string>();

           System.Globalization.CultureInfo vCulture = new System.Globalization.CultureInfo("en-US");
           vCulture.DateTimeFormat.FullDateTimePattern = "MM/dd/yyyy hh:mm tt";
           vCulture.DateTimeFormat.ShortDatePattern = "MM/dd/yyyy";

           if (!DateTime.TryParse(datetoparse, vCulture, System.Globalization.DateTimeStyles.None, out dt))
           {
               vCulture.DateTimeFormat.FullDateTimePattern = "yyyy/MM/dd hh:mm tt";
               vCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
               if (!DateTime.TryParse(datetoparse, vCulture, System.Globalization.DateTimeStyles.None, out dt))
               {
                   vCulture.DateTimeFormat.FullDateTimePattern = "dd/MM/yyyy hh:mm tt";
                   vCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
                   if (!DateTime.TryParse(datetoparse, vCulture, System.Globalization.DateTimeStyles.None, out dt))
                   {
                       vCulture.DateTimeFormat.FullDateTimePattern = "yyyy/dd/MM hh:mm tt";
                       vCulture.DateTimeFormat.ShortDatePattern = "yyyy/dd/MM";
                       if (!DateTime.TryParse(datetoparse, vCulture, System.Globalization.DateTimeStyles.None, out dt))
                       {
                           if (!DateTime.TryParseExact(datetoparse,otherValidFormats, vCulture, System.Globalization.DateTimeStyles.None, out dt))
                           {
                               return string.Empty;
                           }
                       }
                   }
               }
           }

           vCulture.DateTimeFormat.DateSeparator = "/";
           parsedDate = dt.ToString(format, vCulture);

           return parsedDate;

       }


Exception of type 'System.OutOfMemoryException' was thrown.   at System.Globalization.CalendarData.nativeGetCalendarData(CalendarData data, String localeName, Int32 calendar)
   at System.Globalization.CalendarData..ctor(String localeName, Int32 calendarId, Boolean bUseUserOverrides)
   at System.Globalization.CultureData.GetCalendar(Int32 calendarId)
   at System.Globalization.DateTimeFormatInfo.internalGetAbbreviatedMonthNames()
   at System.Globalization.DateTimeFormatInfo.get_FormatFlags()
   at System.__DTString..ctor(String str, DateTimeFormatInfo dtfi)
   at System.DateTimeParse.TryParse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles, DateTimeResult& result)
   at System.DateTimeParse.TryParse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles, DateTime& result)
   at ADMISION.CommonCS.Common.GetFormattedDate(String datetoparse, String format)
   at ADMISION.Task.API.Slate.GetGenericFields(MyParameters myParameters, Int64 triggerId, Int64 universityId, Nullable`1 taskLastModifyDate, Nullable`1 taskLastRunDate)
   at ADMISION.Task.API.Slate.FetchDataToProcess(TaskObject taskObject, HubApiTask task)
   at ADMISION.Task.TaskCS.Processor.ProcessTask(TaskObject taskObject, HubApiTask apiTask, HubTaskHistory hubTaskHistory, String& returndata) 


Что я уже пробовал:

I am not sure how to resolve this bug. 

Ashwin. Shetty

Можете ли вы поделиться входными данными функции?

Richard MacCutchan

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

0 Ответов