Недостатки маркировки класса как сериализуемый

Следующее производит равномерное распределение на {1, 2, 3, 4, 5, 6, 7} использование генератора случайных чисел, производящего равномерное распределение на {1, 2, 3, 4, 5}. Код грязен, но логика ясна.

public static int random_7(Random rg) {
    int returnValue = 0;
    while (returnValue == 0) {
        for (int i = 1; i <= 3; i++) {
            returnValue = (returnValue << 1) + SimulateFairCoin(rg);
        }
    }
    return returnValue;
}

private static int SimulateFairCoin(Random rg) {
    while (true) {
        int flipOne = random_5_mod_2(rg);
        int flipTwo = random_5_mod_2(rg);

        if (flipOne == 0 && flipTwo == 1) {
            return 0;
        }
        else if (flipOne == 1 && flipTwo == 0) {
            return 1;
        }
    }
}

private static int random_5_mod_2(Random rg) {
    return random_5(rg) % 2;
}

private static int random_5(Random rg) {
    return rg.Next(5) + 1;
}    
13
задан HS. 6 August 2009 в 03:43
поделиться

2 ответа

Так почему же он не может сделать это по умолчанию?

Автоматическая сериализация / десериализация может быть недостаточной для объекта. Например, объект может содержать поле, содержащее имя локального файла, указатель на память, индекс общего массива и т. Д. Хотя система обычно может без проблем сериализовать эти необработанные значения, десериализация может легко привести к чему-то это не годится. В общем, система не может разобраться в этом самостоятельно. Требуя от вас пометить класс как Serializable , вы указываете, что приняли эти соображения во внимание.

30
ответ дан 1 December 2019 в 20:43
поделиться

С точки зрения недостатков, основным недостатком сериализации являются накладные расходы на производительность (как ЦП, так и диск) и потенциальные проблемы с задержкой при передаче по сети. Могут возникнуть небольшие проблемы с безопасностью, потому что в целом сериализация XML небезопасна, поскольку она работает только с общедоступными свойствами и классами, вынуждая вас в некоторых случаях использовать открытые свойства, которые в противном случае могли бы отсутствовать. Конечно, если безопасность действительно важна, вы, вероятно, не будете хранить слишком конфиденциальные данные в сеансе.

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

Тем не менее, для управления сеансами, небольшие объекты, хранящиеся в базе данных ASPState, обычно работают нормально, без каких-либо заметных различий в сеансе памяти. На противоположном конце спектра у меня были большие объекты со списками других объектов в качестве свойств и т. Д., И если они достаточно велики, временами может быть заметно снижение производительности.

-1
ответ дан 1 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: