我试图了解与.NET DataTable相关的内存开销量,以及表中的单个DataRows.
换句话说,数据表占用的内存多于存储每列数据的正确类型数组所需的内存量?
我想会有一些基本的表开销,加上每列的一些数量,然后每行再增加一个数量.
那么这些三种开销中的每一种/任何一种都可以给出估计(并且,我猜,解释!)吗?
我正在编写一个小型(C#)客户端应用程序,该应用程序使用TCP / IP连接将数据发送到远程服务器。我正在使用标准的.Net TcpClient对象,并且由于我要定期向服务器提交数据包,因此希望从客户端打开连接。但是,服务器可能会关闭连接,在这种情况下,我需要在发送下一个数据包之前重新连接。
使用Wireshark,当服务器终止连接时,我只能看到以下对话框:
server >>> FIN, ACK
ACK <<< client
我所没有看到的是我的客户拥有自己的FIN响应,以完成连接关闭。结果是我的客户端程序仅在发送下一个数据包后才发现连接已断开。
有什么方法可以设置TcpClient或它的基础Socket以完成断开连接,并提供一些反馈,以便我的客户端代码在发送下一个数据包之前知道重新连接?
为了回应以下评论而添加:我的发送代码非常简单-维护TcpClient和NetworkStream成员变量的对象具有一个成员函数,该成员函数包含(基本上)以下内容:
bool sent = false;
byte[] buffer = Encoding.UTF8.GetBytes(dataString);
while (!sent)
{
try
{
m_outStream.Write(buffer, 0, buffer.Length);
sent = true;
}
catch (Exception ex)
{
if (m_outStream != null) { m_outStream.Dispose(); }
m_client = new TcpClient(AddressFamily.InterNetwork);
m_client.Connect(ipAddress, ipPort);
m_outStream = m_client.GetStream();
}
}
Run Code Online (Sandbox Code Playgroud)
初始化了m_client和m_outStream以后,每次只需执行一次传递。然后,使用Wireshark,我可以看到服务器发送了带有标志的数据包,FIN, ACK客户端对此进行了响应ACK。
下次调用函数时,数据将通过发送出去PSH, ACK,服务器将以响应RST, ACK但不读取传入的数据。客户端不会引发异常。
然后,我第二次调用函数,并引发异常,导致重新启动连接。
我使用.Net 3.5在C#中编程,试图控制浮点数作为字符串输出的格式.
但是,我看到了一些意想不到的行为.如果我的代码包含(例如):
浮点值= 50.8836975;
编辑 对不起,那个(删除的)代码"示例"没有用.基本上,我的问题是当我在"值"之后设置一个断点 - 一个C#浮点数 - 被分配了计算结果时,我试图解释下面的调试语句的结果.Jon Skeet的回答正是我所需要的(他的第一行让我为无用的代码执行任务).
然后,当我在立即窗口中尝试各种选项时,我看到以下结果:
?value
50.8836975
?value.ToString("G9")
"50.8836975"
?value.ToString("F9")
"50.883700000"
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么我的F9格式的值似乎已失去3位数的精度?