我需要你的想法改进我们的实施。
我们需要在10MB
的应用程序中处理大约each analysis
个数据。数据从另一个应用程序包逐个传输。 24000 pakcets
大概有each analysis
因为数据是在该应用程序中逐包创建的,然后立即发送给我们。
我们目前的实施如下:
communication module
接收数据并在收到数据包时将数据放入对象(数据类的实例)。然后它将fire an event
contain that data object
。
data process module
接收事件并将收到的数据对象放入arraylist
。
收到一次分析的所有数据后,data process module
将启动数据处理以分析数据。最后,数据将被存储到数据库中,这些数据对象将被清理以供下一次分析。
each analysis
之间的时间超过10分钟。
我在内部数据传输过程中删除了克隆或复制操作。所以我认为我们实际上是在传递参考。对?我还为这些事件和数据对象创建了一个池。所以这些事件和数据对象将一次又一次地重复使用。
另一个建议是为这些分析数据创建一个shared reusable memory space
(模块之间的内部共享),并将其引用传递给事件。我更喜欢这个想法,但更多的代码改变了我。我现在所做的内存使用情况几乎相同。我是对的吗?
你有什么看法?还有其他更好的想法?对于shared reusable memory space
解决方案,实现它的正确方法是什么?
感谢,
答案 0 :(得分:0)
你可以通过这样的方式使其线程安全。
public sealed class SafeBytes
{
private readonly List<byte> _data;
private readonly object _lock;
public SafeBytes()
{
_data = new List<byte>();
_lock = new object();
}
public void Add(byte[] data)
{
lock (_lock)
{
_data.AddRange(data);
}
}
public byte[] ToArray()
{
lock (_lock)
{
return _data.ToArray();
}
}
}