如果您分析使用的简单客户端应用程序SocketAsyncEventArgs,您将注意到Thread并ExecutionContext分配.
分配的来源是SocketAsyncEventArgs.StartOperationCommon使用创建ExecutionContext的副本ExecutionContext.CreateCopy().
ExecutionContext.SuppressFlow似乎是抑制这种分配的好方法.但是,此方法本身将在新线程中运行时生成分配.
我该如何避免这些分配?
我使用新的Gmail API为我的用户创建草稿.API响应提供新创建的消息ID.
然后我可以用URL打开撰写窗口https://mail.google.com/mail/#drafts?compose=[message-id].但是我想打开一个全屏(弹出)组合窗口.是否有URL?当然,必须使用消息ID对此URL进行参数化.
我有一个简单的客户端应用程序,它以低吞吐量从网络接收字节缓冲区.这是代码:
private static readonly HashSet<int> _capturedThreadIds = new HashSet<int>();
private static void RunClient(Socket socket)
{
var e = new SocketAsyncEventArgs();
e.SetBuffer(new byte[10000], 0, 10000);
e.Completed += SocketAsyncEventsArgsCompleted;
Receive(socket, e);
}
private static void Receive(Socket socket, SocketAsyncEventArgs e)
{
var isAsynchronous = socket.ReceiveAsync(e);
if (!isAsynchronous)
SocketAsyncEventsArgsCompleted(socket, e);
}
private static void SocketAsyncEventsArgsCompleted(object sender, SocketAsyncEventArgs e)
{
if (e.LastOperation != SocketAsyncOperation.Receive || e.SocketError != SocketError.Success || e.BytesTransferred <= 0)
{
Console.WriteLine("Operation: {0}, Error: {1}, BytesTransferred: {2}", e.LastOperation, e.SocketError, e.BytesTransferred);
return;
}
var …Run Code Online (Sandbox Code Playgroud) 获取程序集中定义的类型列表很简单:assembly.GetTypes().
我感兴趣的是运行时当前加载的类型列表.更具体地说,我想获得已加载的已关闭泛型类型的列表.
我想CLR会保留已加载类型的列表.我认为我可以使用CLR MD来获取此列表,但我想在当前进程中获取并使用该列表.使用CLR MD,我必须启动外部进程,捕获加载的类型列表,将其转储到文件,然后从活动进程中读取它.
是否有调试或诊断API提供当前进程的已加载类型列表?
asyncsocket ×2
c# ×2
.net ×1
allocation ×1
clr ×1
debugging ×1
email ×1
gmail ×1
gmail-api ×1
google-api ×1
reflection ×1
sockets ×1
threadpool ×1
winsock ×1