Я пишу вспомогательный класс для sharedpreferences:
import android.content.Context;
import android.content.SharedPreferences;
/**
* Created by mete_ on 23.12.2016.
*/
public class HelperSharedPref {
Context mContext;
public HelperSharedPref(Context mContext) {
this.mContext = mContext;
}
/**
*
* @param key Constant RC
* @param value Only String, Integer, Long, Float, Boolean types
*/
public void saveToSharedPref(String key, Object value) throws Exception {
SharedPreferences.Editor editor = mContext.getSharedPreferences(key, Context.MODE_PRIVATE).edit();
if (value instanceof String) {
editor.putString(key, (String) value);
} else if (value instanceof Integer) {
editor.putInt(key, (Integer) value);
} else if (value instanceof Long) {
editor.putLong(key, (Long) value);
} else if (value instanceof Float) {
editor.putFloat(key, (Float) value);
} else if (value instanceof Boolean) {
editor.putBoolean(key, (Boolean) value);
} else {
throw new Exception("Unacceptable object type");
}
editor.commit();
}
/**
* Return String
* @param key
* @return null default is null
*/
public String loadStringFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
String restoredText = prefs.getString(key, null);
return restoredText;
}
/**
* Return int
* @param key
* @return null default is -1
*/
public Integer loadIntegerFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
Integer restoredText = prefs.getInt(key, -1);
return restoredText;
}
/**
* Return float
* @param key
* @return null default is -1
*/
public Float loadFloatFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
Float restoredText = prefs.getFloat(key, -1);
return restoredText;
}
/**
* Return long
* @param key
* @return null default is -1
*/
public Long loadLongFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
Long restoredText = prefs.getLong(key, -1);
return restoredText;
}
/**
* Return boolean
* @param key
* @return null default is false
*/
public Boolean loadBooleanFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
Boolean restoredText = prefs.getBoolean(key, false);
return restoredText;
}
}
Следующий текст взят из этой ветки на форумах VMWare:
Привет, ребята,
Мы обнаружили, что sgen.exe действительно работает. Просто есть пара дополнительных шагов помимо предварительной генерации dll сериализатора, которые мы пропустили в этом потоке. Вот подробная инструкция
При использовании VIM 2.0 SDK из .NET требуется много времени для создания экземпляра класса VimService. (Класс VimService - это прокси-класс, созданный при запуске 'wsdl.exe vim.wsdl vimService.wsdl')
Другими словами, следующая строка кода:
_service = new VimService();
Может занять около 50 секунд для выполнения.
Очевидно, .NET XmlSerializer
использует атрибуты System.Xml.Serialization. *
, аннотирующие прокси-классы для генерации кода сериализации во время выполнения. Когда прокси-классов много и они велики, как и код в VimService.cs, создание кода сериализации может занять много времени.
Это известная проблема работы сериализатора Microsoft .NET. .
Вот некоторые ссылки, которые MSDN предоставляет по решению этой проблемы:
http://msdn2.microsoft.com/en-us/library/bk3w6240.aspx http://msdn2.microsoft.com /en-us/library/system.xml.serialization.xmlserializerassemblyattribute.aspx
К сожалению, ни одна из приведенных выше ссылок не описывает полное решение проблемы. Вместо этого они сосредотачиваются на том, как предварительно сгенерировать код сериализации XML.
Полное исправление включает следующие шаги:
Создание сборки (DLL) с предварительно сгенерированным кодом сериализатора XML.
Удаление всех ссылок на System.Xml.Serialization. * Атрибуты из прокси-кода (т.е. из файла VimService.cs)
Добавьте аннотацию к основному прокси-классу с помощью атрибута XmlSerializerAssemblyAttribute, чтобы указать ему, где находится сборка сериализатора XML.
Пропуск шага 2 приводит только к 20% сокращению времени создания экземпляра для Класс VimService
. Пропуск шага 1 или 3 приводит к неверному коду. На всех трех этапах достигается 98% улучшение.
Вот пошаговые инструкции:
Прежде чем начать, убедитесь, что вы используете инструменты .NET версии 2.0. Это решение не будет работать с .NET версии 1.1, потому что инструмент sgen и XmlSerializationAssemblyAttribute
доступны только в версии 2.0 .NET
Создайте файл VimService.cs из WSDL с помощью wsdl.exe :
wsdl.exe vim.wsdl vimService.wsdl
Будет выведена служба VimService. cs в текущем каталоге
Скомпилируйте VimService.cs в библиотеку
csc / t: library /out:VimService.dll VimService.cs
Используйте инструмент sgen для предварительного создания и компиляции сериализаторов XML:
sgen / p VimService.dll
Это выведет VimService.XmlSerializers.dll в текущем каталоге
Вернитесь к файлу VimService.cs и удалите все System.Xml.Serialization. *
атрибутов. Поскольку код кода велик, лучший способ добиться этого - использовать какой-нибудь инструмент подстановки регулярных выражений. Будьте осторожны, поскольку не все атрибуты появляются в строке сами по себе. Некоторые из них встроены как часть объявления метода.
Если вы находите этот шаг трудным, вот упрощенный способ его выполнения:
Предполагая, что вы пишете C #, выполните глобальную замену следующей строки:
cs в библиотеку csc / t: library /out:VimService.dll VimService.cs
Используйте инструмент sgen для предварительного создания и компиляции сериализаторов XML:
sgen / p VimService.dll
Это выведет VimService.XmlSerializers.dll в текущий каталог
. Вернитесь к файлу VimService.cs и удалите все атрибуты System.Xml.Serialization. *
. Поскольку код кода велик, лучший способ добиться этого - использовать какой-нибудь инструмент подстановки регулярных выражений. Будьте осторожны, поскольку не все атрибуты появляются в строке сами по себе. Некоторые из них встроены как часть объявления метода.
Если вы находите этот шаг трудным, вот упрощенный способ его выполнения:
Предполагая, что вы пишете C #, выполните глобальную замену следующей строки:
cs в библиотеку csc / t: library /out:VimService.dll VimService.cs
Используйте инструмент sgen для предварительного создания и компиляции сериализаторов XML:
sgen / p VimService.dll
Это выведет VimService.XmlSerializers.dll в текущий каталог
. Вернитесь к файлу VimService.cs и удалите все атрибуты System.Xml.Serialization. *
. Поскольку код кода велик, лучший способ добиться этого - использовать какой-нибудь инструмент подстановки регулярных выражений. Будьте осторожны, поскольку не все атрибуты появляются в строке сами по себе. Некоторые из них встроены как часть объявления метода.
Если вы находите этот шаг трудным, вот упрощенный способ его выполнения:
Предполагая, что вы пишете C #, выполните глобальную замену следующей строки:
csИспользуйте инструмент sgen для предварительного создания и компиляции XML-сериализаторов:
sgen / p VimService.dll
Это выведет VimService.XmlSerializers.dll в текущий каталог
Вернитесь к Файл VimService.cs и удалите все атрибуты System.Xml.Serialization. *
. Поскольку код кода велик, лучший способ добиться этого - использовать какой-нибудь инструмент подстановки регулярных выражений. Будьте осторожны, поскольку не все атрибуты появляются в строке сами по себе. Некоторые из них встроены как часть объявления метода.
Если вы находите этот шаг трудным, вот упрощенный способ его выполнения:
Предполагая, что вы пишете C #, выполните глобальную замену следующей строки:
csИспользуйте инструмент sgen для предварительного создания и компиляции XML-сериализаторов:
sgen / p VimService.dll
Это выведет VimService.XmlSerializers.dll в текущий каталог
Вернитесь к Файл VimService.cs и удалите все атрибуты System.Xml.Serialization. *
. Поскольку код кода велик, лучший способ добиться этого - использовать какой-нибудь инструмент подстановки регулярных выражений. Будьте осторожны, поскольку не все атрибуты появляются в строке сами по себе. Некоторые из них встроены как часть объявления метода.
Если вы находите этот шаг трудным, вот упрощенный способ его выполнения:
Предполагая, что вы пишете C #, выполните глобальную замену следующей строки:
dll в текущем каталоге Вернитесь к файлу VimService.cs и удалите все атрибуты System.Xml.Serialization. *
. Поскольку код кода велик, лучший способ добиться этого - использовать какой-нибудь инструмент подстановки регулярных выражений. Будьте осторожны, поскольку не все атрибуты появляются в строке сами по себе. Некоторые из них встроены как часть объявления метода.
Если вы находите этот шаг трудным, вот упрощенный способ его выполнения:
Предполагая, что вы пишете C #, выполните глобальную замену следующей строки:
dll в текущем каталоге Вернитесь к файлу VimService.cs и удалите все атрибуты System.Xml.Serialization. *
. Поскольку код кода велик, лучший способ добиться этого - использовать какой-нибудь инструмент подстановки регулярных выражений. Будьте осторожны, поскольку не все атрибуты появляются в строке сами по себе. Некоторые из них встроены как часть объявления метода.
Если вы находите этот шаг трудным, вот упрощенный способ его выполнения:
Предполагая, что вы пишете C #, выполните глобальную замену следующей строки:
Будьте осторожны, поскольку не все атрибуты появляются в строке сами по себе. Некоторые из них встроены как часть объявления метода.Если вы находите этот шаг трудным, вот упрощенный способ его выполнения:
Предполагая, что вы пишете C #, выполните глобальную замену следующей строки:
Будьте осторожны, поскольку не все атрибуты появляются в строке сами по себе. Некоторые из них встроены как часть объявления метода.Если вы находите этот шаг трудным, вот упрощенный способ его выполнения:
Предполагая, что вы пишете C #, выполните глобальную замену следующей строки:
[System.Xml.Serialization.XmlIncludeAttribute
и замените его на:
// [System.Xml.Serialization.XmlIncludeAttribute
Это позволит избавиться от Xml.Serialization
атрибуты, которые являются основными виновниками замедления, путем их комментариев. Если вы используете какой-либо другой язык .NET, просто измените заменяемую строку, чтобы она была закомментирована префиксом в соответствии с синтаксисом этого языка. Этот упрощенный подход даст вам максимальное ускорение, которое вы можете получить. Удаление остальных атрибутов Xml.Serialization дает дополнительное ускорение только на 0,2 секунды.
Добавьте следующий атрибут к классу VimService в VimService.cs:
[System.Xml.Serialization.XmlSerializerAssemblyAttribute (AssemblyName = "VimService.XmlSerializers")]
У вас должно получиться что-то вроде этого:
// ... Здесь какой-то код ...
[System.Xml.Serialization.XmlSerializerAssemblyAttribute (AssemblyName = "VimService.XmlSerializers")]
общедоступный частичный класс VimService: System.Web.Services.Protocols.SoapHttpClientProtocol {
// ... Больше кода здесь
Регенерировать библиотеку VimSerice.dll с помощью
csc / t: library /out:VimService.dll VimService.cs
Теперь из вашего приложения вы можете добавить ссылку на VimSerice .dll библиотека.
Запустите приложение и убедитесь, что время создания объекта VimService сокращено.
Инструмент sgen - это что-то вроде черного ящика, и его поведение зависит от того, что у вас есть на вашем компьютере .config файл. Например, по умолчанию предполагается вывод оптимизированного неотладочного кода, но это не всегда так. Чтобы получить некоторое представление об инструменте, используйте флаг / k на шаге 3, который заставит его сохранить все свои временные сгенерированные файлы, включая исходные файлы и файлы параметров командной строки, которые он сгенерировал.
Даже после вышеуказанного исправления время, необходимое для создания экземпляра класса VimService в первый раз, не является мгновенным (1,5 секунды). Основываясь на эмпирических наблюдениях, кажется, что большая часть оставшегося времени связана с обработкой атрибутов SoapDocumentMethodAttribute
. На данный момент неясно, как это время можно сократить. Предварительно сгенерированная сборка XmlSerializer не учитывает атрибуты, связанные с SOAP, поэтому эти атрибуты должны оставаться в коде. Хорошей новостью является то, что только первое создание экземпляра класса VimService для этого приложения занимает много времени. Поэтому, если дополнительные 1,5 секунды являются проблемой, можно попытаться создать фиктивный экземпляр этого класса в начале приложения в качестве средства для улучшения пользовательского опыта времени входа в систему.
SoapDocumentMethodAttribute
. На данный момент неясно, как это время можно сократить. Предварительно сгенерированная сборка XmlSerializer не учитывает атрибуты, связанные с SOAP, поэтому эти атрибуты должны оставаться в коде. Хорошей новостью является то, что только первое создание экземпляра класса VimService для этого приложения занимает много времени. Поэтому, если дополнительные 1,5 секунды являются проблемой, можно попытаться создать фиктивный экземпляр этого класса в начале приложения в качестве средства для улучшения пользовательского опыта времени входа в систему. похоже, что большая часть оставшегося времени связана с обработкой атрибутов SoapDocumentMethodAttribute
. На данный момент неясно, как это время можно сократить. Предварительно сгенерированная сборка XmlSerializer не учитывает атрибуты, связанные с SOAP, поэтому эти атрибуты должны оставаться в коде. Хорошей новостью является то, что только первое создание экземпляра класса VimService для этого приложения занимает много времени. Поэтому, если дополнительные 1,5 секунды являются проблемой, можно попытаться создать фиктивный экземпляр этого класса в начале приложения в качестве средства для улучшения пользовательского опыта времени входа в систему. Предварительно сгенерированная сборка XmlSerializer не учитывает атрибуты, связанные с SOAP, поэтому эти атрибуты должны оставаться в коде. Хорошей новостью является то, что только первое создание экземпляра класса VimService для этого приложения занимает много времени. Поэтому, если дополнительные 1,5 секунды являются проблемой, можно попытаться создать фиктивный экземпляр этого класса в начале приложения в качестве средства для улучшения пользовательского опыта времени входа в систему. Предварительно сгенерированная сборка XmlSerializer не учитывает атрибуты, связанные с SOAP, поэтому эти атрибуты должны оставаться в коде. Хорошей новостью является то, что только первое создание экземпляра класса VimService для этого приложения занимает много времени. Поэтому, если дополнительные 1,5 секунды являются проблемой, можно попытаться создать фиктивный экземпляр этого класса в начале приложения в качестве средства для улучшения пользовательского опыта времени входа в систему. Я полагаю, что это не проблема SGEN. Я посмотрел на код конструктора, и я вижу, что он делает большое отражение (на основе XmlIncludeAttribute на классе). Это размышляет над всеми ними и может действительно занять много времени.
Вы могли бы хотеть изучить Sgen.exe
инструмент, который идет с.NET. Существует также удобная небольшая вещь на странице "Build" свойств проекта Visual Studio C#, в самой нижней части, названной "Блок сериализации сборки", который автоматически работает Sgen
за Вами.
Существует предварительно сгенерированный блок XmlSerializer, который идет с CRM. Проверьте, чтобы видеть, есть ли у Вас SdkTypeProxy.XmlSerializers.dll и SdkProxy.XmlSerializers.dll в GAC.
, Если Вы не делаете затем, это означает, что при создании CrmService .NET генерирует блок XmlSerializer, который может занять время. Надежда это помогает