小编Nic*_*ick的帖子

在.NET DataTable中存储数据的内存开销是多少?

我试图了解与.NET DataTable相关的内存开销量,以及表中的单个DataRows.
换句话说,数据表占用的内存多于存储每列数据的正确类型数组所需的内存量?
我想会有一些基本的表开销,加上每列的一些数量,然后每行再增加一个数量.

那么这些三种开销中的每一种/任何一种都可以给出估计(并且,我猜,解释!)吗?

.net datatable memory-management

23
推荐指数
2
解决办法
1万
查看次数

.Net套接字不响应远程断开连接?

我正在编写一个小型(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 c# sockets tcpclient

4
推荐指数
1
解决办法
4007
查看次数

ToString("F")相对于ToString("G")会丢失精度吗?

我使用.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位数的精度?

.net c# format numbers tostring

1
推荐指数
1
解决办法
5933
查看次数