Ничего себе, это действительно выглядит глупым, не так ли?
проблема состоит в том, что - согласно книге Microsoft Press ".NET Ассемблер IL" Lidin - rem IL и отделение atithmetic инструкции точно что: вычислите остаток и вычислите делитель.
Все арифметические операции кроме операции отрицания берут два операнда от стека и помещают результат на стек.
, По-видимому, способ, которым разработан ассемблерный язык IL, не возможно иметь инструкцию IL, которая производит два вывода и продвигает их на стопку оценки. Учитывая, что ограничение, у Вас не может быть инструкции подразделения в ассемблере IL, который вычисляет обоих путь, x86 DIV или инструкции IDIV делают.
IL был разработан для безопасности, verifiability, и устойчивости, НЕ для производительности. Любой, кто имеет вычисление - интенсивное приложение и заинтересован, прежде всего, с производительностью, будет использовать собственный код и не.NET.
я недавно посетил Супервычисления '08, и на одном из технических семинаров, евангелист для Microsoft Compute Server дал грубое эмпирическое правило, что.NET обычно была половиной скорости собственного кода - который точно имеет место здесь!.
Хорошо, я думаю, что в конце концов у меня получилось. Первое, что нужно сделать, - это добавить следующие атрибуты к каждому свойству класса ReportType, которое необходимо сериализовать и унаследовать класс от ApplicationSettingsBase:
public class ReportType : ApplicationSettingsBase
{
private string displayName;
[UserScopedSetting()]
[SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)]
public string DisplayName
{
get { return displayName; }
}
..............
а затем, как только вы перестроили свою сборку (важно!), вы можете перейти на экран настроек и нажать кнопку «Обзор», а затем ввести свое пространство имен и имя класса в текстовое поле внизу (например, Label_Creator.ReportType). Пространство имен и имя класса не отображаются в дереве, поэтому эта часть не совсем очевидна, что вам нужно делать, поэтому это немного сбивает с толку ....
How about creating a static method which returns an instance of ReportType containing data from the config file. It's simpler and I don't think serializing is necessary.
public class ReportType
{
public static ReportType GetDefaultSelectedReportType()
{
string displayName = ConfigurationManager.AppSettings["DefaultDisplayName"];
string reportName = ConfigurationManager.AppSettings["DefaultReportName"];
return new ReportType(displayName, reportName);
}
.
.
.
}
Just a bit more clear code then Charlie's
public class ReportType
{
public static ReportType CreateDefaults()
{
return new ReportType
{
DisplayName = ConfigurationManager.AppSettings["DefaultDisplayName"],
ReportName = ConfigurationManager.AppSettings["DefaultReportName"]
};
}
}