改善临时数据存储

时间:2010-07-30 15:07:06

标签: c# .net

我需要你的想法改进我们的实施。

我们需要在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解决方案,实现它的正确方法是什么?

感谢,

1 个答案:

答案 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();
        }
    }
}