《你不常用的c#之四》:Array的小抽屉ArraySegment

一:)略谈
ArraySegment顾名思义就是Array区块,数组的小抽屉,用于对该数组中元素的范围进行分隔。比如这个数组: 

 

我们用ArraySegment这个抽屉给装起来就是:

 

只需for一下就可以得出这个小抽屉里的myArr值(不能foreach,ArraySegment无GetEnumerator方法实现)

 

比如我们想取某个区域,可以:

 

 

则取myArr的索引从1到3的值,
 
需要注意的是:
多个 ArraySegment 实例可以引用同一个原始数组,从而可能发生重叠。Array 属性返回整个原始数组,而不是该数组的副本;
所以:
 
则会导致myArr里的值也发生变化,此时的myArr值则为:
 
三):应用
应用方面:所以ArraySegment可以用在内存碎片(fragmentation)较多的地方,来减少内存碎片的产生,以便使内存更有序,提高我们的程序性能。比如Socket.BeginReceive异步接收频繁的时候,我们并不知道要接受的这个buffer长度,所以就预先设置一个固定值,这时候这块内存就会被pin住,一直等到网络硬件接收到数据完成为止,这往往比较容易产生碎片,如果你用windbg一看,!DumpHeap -type Free -stat会有很多objects但是值都是0.所以可以用ArraySegment+Stack来解决,我会拿出专门的一节来讲解。

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C# WebSocket 是一个用于在客户端和服务器之间进行实时双向通信的协议。它提供了一种可靠的、异步的方式来发送和接收数据,适用于实时聊天、实时游戏、实时数据更新等应用场景。 在 C# 中,可以使用 System.Net.WebSockets 命名空间下的类来实现 WebSocket。首先,需要创建一个 WebSocket 对象,并使用 ConnectAsync() 方法连接到服务器。然后,可以使用 SendAsync() 方法发送消息到服务器,使用 ReceiveAsync() 方法接收服务器发送的消息,并使用 CloseAsync() 方法关闭连接。 以下是一个简单的示例代码: ``` using System; using System.Net.WebSockets; using System.Threading; using System.Threading.Tasks; public class WebSocketClient { private ClientWebSocket webSocket; public WebSocketClient() { webSocket = new ClientWebSocket(); } public async Task Connect(string url) { await webSocket.ConnectAsync(new Uri(url), CancellationToken.None); // 连接成功后可以进行消息发送和接收操作 } public async Task SendMessage(string message) { var buffer = new ArraySegment<byte>(System.Text.Encoding.UTF8.GetBytes(message)); await webSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None); } public async Task<string> ReceiveMessage() { var buffer = new ArraySegment<byte>(new byte[4096]); var result = await webSocket.ReceiveAsync(buffer, CancellationToken.None); return System.Text.Encoding.UTF8.GetString(buffer.Array, 0, result.Count); } public async Task Close() { await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); } } ``` 以上代码演示了一个基本的 WebSocket 客户端的实现。你可以根据自己的需求进行扩展和调整。希望对你有所帮助!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值