Карта Gemalto .NET содержит как постоянную память, так и изменчивую память , которые используются для хранения данных. Постоянная память работает как постоянное хранилище для карты - данные сохраняются в ней даже после того, как карта удалена из устройства чтения смарт-карт. Энергонезависимая память сбрасывается , когда карта теряет мощность и не может использоваться для постоянного хранения.
Как вы храните свои данные и как вы заполняете BookList данными? уточните пожалуйста.
У вас есть ограничение по памяти, конечно, вы не можете сохранить до определенного размера. На этой карте .net у вас есть 16 КБ энергозависимой памяти (ОЗУ) и 70 КБ постоянной памяти (которые содержат сборки, память).
Я протестировал на карте Gemalto .net и смог хранить 20 Кбайт данных в постоянной памяти, после этого ограничения я получаю такое же исключение OutOfMemoryException (потому что остальные 50 КБ заполнены файлами, сборками).
Эта карточка не предназначена для хранения базы данных, записей и т. Д., Которая используется для хранения важной информации, такой как ключи и пароли. Поэтому не экономьте больше, чем этот размер, и ваш код будет в порядке, или используйте любой алгоритм сжатия текста (в клиентском приложении), чтобы уменьшить размер до хранения в карточке, но в конце не пытайтесь хранить больше, чем это ~ XX КБ.
обновление: Из-за этого ограничения вы не можете хранить больше, чем 70K в постоянной памяти, и вы не можете получить больше, чем 16KB с карты клиента (так как эти данные будут храниться в локальной переменной т.е. энергозависимой памяти, а затем возвращается обратно вашему клиенту, и у вас есть ограничения также здесь).
Так что это источник вашей проблемы, вы извлекаете более энергозависимой памяти может содержать:
public string getBook(int index)
{
return bookList[index].getId() + " , " + bookList[index].getName();
}
до того возвращаемого значения, эти данные будут в временно переменной, а потому, что вы не можете сохранить более 16KB вы получаете исключение OutOfMemoryException.
решение использовать эту память непосредственно от клиента (у вас есть ссылка, так просто использовать его):
public Book getTheBook(int index)
{
return bookList[index];
}
и от клиента вы можете получить доступ к функциям Book (убедитесь, что ваша книга является структура, потому что сортировочных поддерживается только для структуры и примитивных типов в Gemalto .net карты):
Console.WriteLine(service.getTheBook(0).getName());
может кто-нибудь помочь ??? – user1477701
что вы пытаетесь достичь? как сделать этот массив/List BookList и как вы заполняете данные в эту коллекцию? –