设为首页 加入收藏

TOP

网络数据处理缓冲区和缓冲池实现(二)
2014-11-23 23:39:52 来源: 作者: 【 】 浏览:19
Tags:网络 数据处理 缓冲区 缓冲 实现

lock (mPools)

12

{

13

for (int i = 0; i < pools; i++)

14

{

15

mPools.Add(new BufferPool(buffers, bufferlength));

16

}

17

}

18

}

19

public static void Clean()

20

{

21

lock (mPools)

22

{

23

foreach (BufferPool item in mPools)

24

{

25

item.Dispose();

26

}

27

mPools.Clear();

28

}

29

}

30

public static BufferPool GetPool()

31

{

32

lock (mPools)

33

{

34

if (mIndex == mPools.Count)

35

{

36

mIndex = 0;

37

}

38

return mPools[mIndex];

39

}

40

}

41

Queue mBuffers;

42

private int mBufferLength;

43

public BufferPool(int count, int bufferlength)

44

{

45

mBufferLength = bufferlength;

46

mBuffers = new Queue(count);

47

for (int i = 0; i < count; i++)

48

{

49

mBuffers.Enqueue(createBuffer(bufferlength));

50

}

51

}

52

private DataBuffer createBuffer(int length)

53

{

54

DataBuffer item = new DataBuffer(length);

55

item.Pool = this;

56

return item;

57

}

58

public DataBuffer Pop()

59

{

60

lock (mBuffers)

61

{

62

return mBuffers.Count > 0 mBuffers.Dequeue() : createBuffer(mBufferLength);

63

}

64

}

65

public void Push(DataBuffer buffer)

66

{

67

lock (mBuffers)

68

{

69

mBuffers.Enqueue(buffer);

70

}

71

}

72

private bool mDisposed = false;

73

private void OnDispose()

74

{

75

lock (mBuffers)

76

{

77

while (mBuffers.Count > 0)

78

{

79

mBuffers.Dequeue().Pool = null;

80

}

81

}

82

}

83

public void Dispose()

84

{

85

lock (this)

86

{

87

if (!mDisposed)

88

{

89

OnDispose();

90

mDisposed = true;

91

}

92

}

93

}

94

}

BufferPool实现了几个静态方法

Setup

主要目的是用于构造多个缓冲池,缓冲区数量和缓冲区大小。为什么会考虑多个池呢,主要原因是在高并发的来分配处理减低池的负载。

Clean

用于清除释放缓冲池

GetPool

平均地分发缓冲池给使用者

一个简单的数据缓冲区和数据缓冲池已经实现了,在后面的文章里会讲述如何构造BufferWriter和BufferReader,根据对象的需要把信息分别写入多个缓冲区和在多个缓冲区中读取信息还原对象。

摘自 smark

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇在对话框显示出来后立即执行一段.. 下一篇C语言学习笔记(一)--初识C语言

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: