我正在调查使用log4net和System.Diagnostics.Trace日志记录之间的差异,我很好奇我观察到的性能差异.
我创建了一个测试应用程序来比较几种情况下两种日志记录方法的性能,我发现log4net明显慢于Trace类.例如,在我记录1,000条没有字符串格式的消息的情况下,log4net超过1,000次试验的平均执行时间是9.00ms. Trace以1.13ms的平均值执行.我的很多测试用例在log4net执行时间上有很大的差异; 异常长期执行的周期性似乎表明GC干扰.使用CLR Profiler进行探测确认了生成大量log4net.Core.LoggingEvent对象的大量集合(公平地说,它看起来也会Trace生成大量Char[]对象,但它不会显示log4net所做的大差异. )
我在这里要记住的一件事是,尽管log4net似乎慢了大约9倍Trace,但差异是1,000次迭代的8ms; 这并不是一个显着的性能消耗.尽管如此,我的一些预期用例可能是调用数十万次记录事物的方法,这些数字来自我的快速机器.在较慢的机器上,更典型的用户配置,差异是170毫秒到11毫秒,这是一个更微小的警报.
这种性能是典型的log4net,还是有一些可以显着提高log4net性能的问题?
(注意:我知道字符串格式化可以改变执行时间;我试图比较苹果和苹果,我有没有格式化的测试用例和带格式化的测试用例;无论是否使用字符串格式,log4net都保持比例缓慢.)
到目前为止的故事:
Trace类慢得多,我很好奇.int l = strlen(s);
警告C4244:'=':从'__w64 int'转换为'int',可能会丢失数据
我需要用内联函数替换strlen int l = new_strlen(s);
但是如何在没有警告的情况下将strlen的结果移植到int中并且不使用pragma?我可以保证我的字符串中不超过20亿个字符!
所有明显的事情,如reinterpret_cast,static_cast也会产生错误或警告.
编辑:唉.一个c风格的演员:(int)确实有效.我确信它没有.
我正在尝试通过Project Euler工作,我在问题03上遇到障碍.我有一个适用于较小数字的算法,但问题3使用非常非常大的数字.
问题03: 13195的主要因素是5,7,13和29. 600851475143中最大的素数因子是什么?
这是我在C#中的解决方案,它一直在运行,我认为接近一个小时.我不是在寻找答案,因为我确实想自己解决这个问题.主要是寻求一些帮助.
static void Main(string[] args) {
const long n = 600851475143;
//const long n = 13195;
long count, half, largestPrime = 0;
bool IsAPrime;
half = n / 2;
for (long i = half; i > 1 && largestPrime == 0; i--) {
if (n % i == 0) { // these are factors of n
count = 1;
IsAPrime = true;
while (++count < i && IsAPrime) {
if (i % count == 0) …Run Code Online (Sandbox Code Playgroud) 在我的阅读狂欢中,我偶然发现了一种名为" 故意编程"的东西.我有点理解,但我并不完全.如果有人能够更详细地解释它,请做.它是否在任何实际应用中使用?
为什么从ASP.NET MVC预览版本5中删除了CheckBoxList?
目前我没有看到任何方式可以创建复选框列表(名称相似但ID不同),因此人们可以从列表中选择0-1个以上的选项.
CheckBoxListMVCContrib库中存在一个列表,但不推荐使用.我可以理解其他HtmlHelpers,但似乎没有替代CheckBoxList预览5.
我想创建一个非常简单的列表,如下所示,但使用ASP.NET MVC预览版本5的最佳方法是什么?
<INPUT TYPE="checkbox" NAME="Inhoud" VALUE="goed"> goed
<INPUT TYPE="checkbox" NAME="Inhoud" VALUE="redelijk"> redelijk
<INPUT TYPE="checkbox" NAME="Inhoud" VALUE="matig"> matig
<INPUT TYPE="checkbox" NAME="Inhoud" VALUE="slecht"> slecht
Run Code Online (Sandbox Code Playgroud) 我在.tar.gz存档中有大量文件.使用命令检查文件类型
file SMS.tar.gz
Run Code Online (Sandbox Code Playgroud)
给出了回应
gzip compressed data - deflate method , max compression
Run Code Online (Sandbox Code Playgroud)
当我尝试使用gunzip提取存档时,延迟后我收到消息
gunzip: SMS.tar.gz: unexpected end of file
Run Code Online (Sandbox Code Playgroud)
有没有办法恢复部分档案?
仅仅因为我很好奇 - 在C++中是否有任何C模拟STL的功能?我已经看到提到一个名为glib 的GTK +库,有些人认为这个库填满了账单,但是有其他库会在C中提供STL功能吗?
我正在尝试使用以下代码:
string url = String.Format(@"SOMEURL");
string user = "SOMEUSER";
string password = "SOMEPASSWORD";
FtpWebRequest ftpclientRequest = (FtpWebRequest)WebRequest.Create(new Uri(url));
ftpclientRequest.Method = WebRequestMethods.Ftp.ListDirectory;
ftpclientRequest.UsePassive = true;
ftpclientRequest.Proxy = null;
ftpclientRequest.Credentials = new NetworkCredential(user, password);
FtpWebResponse response = ftpclientRequest.GetResponse() as FtpWebResponse;
Run Code Online (Sandbox Code Playgroud)
这通常有效,但对于1个特定服务器,这会产生错误500:语法无法识别.在问题服务器上禁用了"更改目录"命令,并且站点管理员告诉我,.NET默认情况下会发出一个"更改目录"命令,其中包含所有FTP连接.真的吗?有没有办法禁用它?
编辑:当我从命令行登录时,我在正确的目录中:
ftp> pwd
257"/"是当前目录
我已经和VS的调试器一起工作多年了,但我偶尔会遇到一个我以前从未注意过的功能,并且想想"该死的!我怎么能错过它?它非常有用!"
[免责声明:这些提示适用于VS 2005中的C#项目,不保证VS或其他语言的旧版本]
使用给定类的多个实例?你怎么能分开他们?在垃圾收集前编程时,很容易跟踪引用 - 只需查看内存地址即可.使用.NET,你不能这样做 - 对象可以移动.幸运的是,通过手表视图,您可以右键单击手表并选择"创建对象ID".
这会在实例的值之后附加{1#},{2#}等,从而有效地为实例提供唯一标签.它看起来像这样:
标签在该对象的生命周期内保持不变.
默认情况下,监视变量的值是它的类型.如果你想看到它的字段,你必须扩展它,如果有很多字段或它们做了一些复杂的事情,这可能需要很长时间(甚至超时!).
但是,某些预定义类型显示更有意义的信息:
有意义的信息http://img205.imageshack.us/img205/4808/37220487md1.jpg
拥有我自己的类型不是很好吗?
嗯...
...使用.NET Reflector的一些高质量时间显示了使用DebuggerDisplay我的自定义类型上的属性可以轻松实现这一点:
[System.Diagnostics.DebuggerDisplay("Employee: '{Name}'")]
public class Employee {
public string Name { get { ... } }
...
}
Run Code Online (Sandbox Code Playgroud)
......重新运行,......
ta da!http://img60.imageshack.us/img60/926/79816018ha1.jpg
这里有关于这个主题的更多信息:MSDN
......甚至是代码处理的!我知道,自从我出生以来,我就是一个不知道这一点的人,但无论如何它都在这里 - 也许有一天这会对某人有所帮助:
每次抛出异常时,您都可以强制调试进程进入调试模式.曾经花了几个小时寻找一个只是为了遇到这样的代码吗?
try {
runStrangeContraption();
} catch(Exception ex) {
/* TODO: Will handle this error later */
}
Run Code Online (Sandbox Code Playgroud)
在这些情况下捕获所有异常非常方便.这可以从Debug> Exceptions ...(Ctrl-Alt-E)启用.勾选"Thrown"列中的框,了解您需要的每种类型的例外情况.
那对我来说是一些前额拍打的时刻.你愿意分享你的吗?
c# ×2
.net ×1
algorithm ×1
archive ×1
asp.net-mvc ×1
c ×1
c++ ×1
checkboxlist ×1
corrupt ×1
debugging ×1
ftp ×1
gzip ×1
log4net ×1
logging ×1
performance ×1
primes ×1
recover ×1
sharepoint ×1
spweb ×1
stl ×1