每当我的客户端失去服务器连接时,我都会有一个重新连接循环,不断寻找服务器。
当此循环运行时,每次尝试连接时都会生成conhost.exe和csc.exe进程,直到计算机停止运行为止。
有谁知道会创建这些流程的内容?
所以会发生什么,无论何时出现故障连接或丢失连接,我都会调用Initialize。这应该适当地处理所有组件,然后重新初始化它们。
NetworkInterface和TcpInterface的初始化方法:
public void Initialize()
{
if (ni != null)
{
ni.Dispose();
GC.Collect();
}
if (tcpInterface != null)
{
tcpInterface.Dispose();
}
tcpInterface = new TcpInterface();
if (!string.IsNullOrEmpty(ipAddress))
{
tcpInterface.Settings = new TcpSettings
{
RemoteIp = ipAddress,
Port = _port,
PacketDenotesLength = false
};
}
tcpInterface.NewConnection += new TcpInterface.TcpNetworkStateEventHandler(tcpInterface_NewConnection);
tcpInterface.FailConnection += new TcpInterface.ConnectionEventHandler(tcpInterface_FailConnection);
tcpInterface.ReceivePacket += new TcpInterface.TcpInterfacePacketEventHandler(tcpInterface_ReceivePacket);
tcpInterface.LoseConnection += new TcpInterface.TcpNetworkStateEventHandler(tcpInterface_LoseConnection);
ni = new NetworkInterface<string, PacketInfo>();
ni.Services.Register("TcpInterface", tcpInterface);
ni.Initialize();
}
TcpInterface的Dipose:
public void Dispose()
{
if (TcpClient != null)// && TcpClient.Connected)
{
if (TcpClient.Connected)
{
NetworkStream stream = TcpClient.GetStream();
if (stream != null)
{
stream.Close();
}
}
TcpClient.Close();
TcpClient = null;
}
Buffer = null;
BufferBuilder = null;
}
处理ni:
public void Dispose()
{
Services.Dispose();
}
答案 0 :(得分:2)
csc.exe是C#编译器。
你使用XmlSerializer进行血清化/反序列化吗?如果你没有生成你的程序集,那么XmlSerializer将启动csc.exe并将一些代码编译到临时文件夹。
另一种选择是在C#中使用CodeDom。然后代码将使用csc.exe进行编译。