Из документации fread
, это функция для чтения двоичных данных. Второй аргумент определяет размер выходного вектора, третий - размер / тип прочитанных элементов.
Чтобы воссоздать это в Python, вы можете использовать array
:
f = open(...)
import array
a = array.array("L") # L is the typecode for uint32
a.fromfile(f, 3)
Это будет читать три значения uint32 из файла f
, которые затем доступны в a
. Из документации по fromfile
:
Прочитайте n элементов (как машинные значения) из файлового объекта f и добавьте их в конец массива. Если доступно меньше n элементов, EOFError будет поднят, но элементы, которые были доступны, все еще вставлены в массив. f должен быть реальным встроенным файловым объектом; что-то еще с методом read () не будет делать.
blockquote>Массивы реализуют протокол последовательности и, следовательно, поддерживают те же операции, что и списки, но вы также можете использовать метод
.tolist()
для создания обычный список из массива.
Я провел дополнительное расследование и создал POC, чтобы проверить, создает ли он копию сеансов по ссылке или по значению.
Я обнаружил, что он создает копию по ссылке. Так что технически нет проблемы использования памяти, если я добавлю их ссылку в класс SessionTracker. Вот полная реализация класса SessionTracker, если кому-то интересно узнать об этом
public class SessionTracker : IRegisteredObject
{
static readonly SessionTracker Tracker = new SessionTracker();
private static readonly Dictionary<string, HttpSessionState> _sessions = new Dictionary<string, HttpSessionState>();
private static readonly object padlock = new object();
private SessionTracker()
{
}
public void Stop(bool immediate)
{
try
{
//store them in database
}
catch (Exception ex)
{
throw;
}
}
public void AddSession(HttpSessionState session)
{
lock (padlock)
{
_sessions.Add(session.SessionID, session);
}
}
public void RemoveSession(HttpSessionState session)
{
lock (padlock)
{
_sessions.Remove(session.SessionID);
}
}
public static SessionTracker GetInstance()
{
return Tracker;
}
}