我有一个单一的记录器类.在它的析构函数中,我调用Close()打印日志的页脚,然后关闭StreamWriter.
public void Close()
{
WriteLogFileFooter();
_logFile.Flush();
_logFile.Close();
}
Run Code Online (Sandbox Code Playgroud)
问题是当从程序中的其他地方调用System.Enviornment.Exit(1)时(我自己没有编写的部分),页脚永远不会打印,我的记录器会因尝试写入封闭流而抛出异常.我只能假设Exit命令导致我的StreamWriter在我的Singleton被破坏之前被关闭.我尝试在我的StreamWriter上使用GC.SupressFinalize(),但这似乎没有帮助.
或者,如果达到最终化方法,它是否已经迟到了?
基本上我正在创建一些代码来登录MySql数据库.每个日志条目由一个对象表示并存储在队列中,直到它在批量插入/更新中刷新到数据库.我想每次我想写一个条目时在堆上创建一个新对象是低效的(特别是因为我可能想在性能敏感区域写一两个条目).我的解决方案是创建一个对象池并重用它们.
基本上我试图不通过让.Net垃圾收集器让我知道何时不再需要一个对象并且可以将其添加回池中来重新发明轮子.问题是我需要从析构函数中止垃圾收集.那可能吗?
我有一个多线程控制台应用程序,可以从两个不同的来源获取输入.一个是用户输入控制台,另一个是网络.我使用BufferedReader.readline()来获取用户和块的输入,这很好,除非我在等待时接收网络输入.在这种情况下,我需要通过取消readline()来取消阻止用户线程.
我认为取消它的最好方法是关闭System.in并使readline()抛出异常.在那之后,虽然我需要重新打开它.那可能吗?
我正在编写一个C#应用程序,每当我尝试使用FtpWebRequest或WebClient进行任何FTP操作时,我总是得到"System.Net.WebException:底层连接已关闭:服务器提交了协议违规." 使用FTP客户端应用程序(tunnelier)连接可以很好地工作.在连接日志中,Tunnelier提到"开始新的SSH2会话"和"连接到SSH2服务器"等.另外,我读到了在谷歌上发现的一些古老线程中引起SSH的问题所以我认为这就是我遇到的问题.
我真的不想使用第三方的东西,但如果我必须,我想我会.
所以我正在使用包含一些Web服务的单例类.对服务的引用存储为私有静态只读成员.我希望有一个非常相似的类,它使用相同的接口包装不同的Web服务.如果我从第一个类继承并覆盖私有静态只读成员与新的成员将一切顺利,我认为?是否所有继承的函数(一些是公共的,一些是私有的,一些是静态的)都使用新的引用?
我问,因为我之前遇到了一些继承静态成员的怪癖.