为C#性能测试清除缓冲区?

为C#性能测试清除缓冲区?,c#,sql-server,performance,.net-4.0,buffer,C#,Sql Server,Performance,.net 4.0,Buffer,在SQL Server中,当我想检查性能时,我会清除所有缓冲区,以获得真正的结果:我使用 CHECKPOINT 1 DBCC DROPCLEANBUFFERS dbcc FREEPROCCACHE 然后我检查GetDate()的 我应该在C#中使用什么命令来清除任何缓冲区/速度助手机制? (我打算用秒表) 谢谢。一个.NET程序有很多“缓存”,并且不是所有的缓存都能被清除。您的CPU缓存不仅由您的进程填充,还由计算机上运行的其他进程填充。在第一次调用函数时,你会有编译函数的抖动,

在SQL Server中,当我想检查性能时,我会清除所有缓冲区,以获得真正的结果:我使用

  CHECKPOINT 1
  DBCC DROPCLEANBUFFERS
  dbcc FREEPROCCACHE 
然后我检查
GetDate()的

我应该在C#中使用什么命令来清除任何缓冲区/速度助手机制? (我打算用秒表)


谢谢。

一个.NET程序有很多“缓存”,并且不是所有的缓存都能被清除。您的CPU缓存不仅由您的进程填充,还由计算机上运行的其他进程填充。在第一次调用函数时,你会有编译函数的抖动,这使得第一次迭代比任何其他迭代都要长得多。如果您使用的是任何类型的I/O,那么您也有这些缓存和缓冲区

此外,你为什么要清除这些缓存?他们在那里帮助你。在现实世界中,缓存命中将有助于提高性能—为什么不在考虑缓存和缓冲区的同时测量程序的性能呢


无论如何,我认为你应该用一个分析器而不是秒表来衡量你的表现。SQL Server也是如此。

一个.NET程序有很多“缓存”,并不是所有的缓存都可以清除。您的CPU缓存不仅由您的进程填充,还由计算机上运行的其他进程填充。在第一次调用函数时,你会有编译函数的抖动,这使得第一次迭代比任何其他迭代都要长得多。如果您使用的是任何类型的I/O,那么您也有这些缓存和缓冲区

此外,你为什么要清除这些缓存?他们在那里帮助你。在现实世界中,缓存命中将有助于提高性能—为什么不在考虑缓存和缓冲区的同时测量程序的性能呢


无论如何,我认为你应该用一个分析器而不是秒表来衡量你的表现。SQL Server也是如此。

这在很大程度上取决于代码的功能。你能提供更多细节吗?另外,一般来说,性能测量应该在任何耗时的初始化之后进行,并且在算法运行足够长的时间以稳定状态之后进行。@jnylen我不关心代码。我关心的是防止第二次考虑缓存。我希望所有>1次都与第一次执行相同。我需要清除缓冲区。怎么做?罗伊·纳米尔:什么缓存?什么缓冲区?没有包含所有潜在算法的“C#代码缓冲/速度助手”,这就是我要求澄清的原因。正如zmbq所提到的,编译器和CPU缓存等底层结构对真实世界的性能非常重要,应该在基准测试中进行衡量。要衡量C#代码的性能,你必须“关心”代码以及它在做什么。否则,您的值很可能毫无意义。这在很大程度上取决于代码的功能。你能提供更多细节吗?另外,一般来说,性能测量应该在任何耗时的初始化之后进行,并且在算法运行足够长的时间以稳定状态之后进行。@jnylen我不关心代码。我关心的是防止第二次考虑缓存。我希望所有>1次都与第一次执行相同。我需要清除缓冲区。怎么做?罗伊·纳米尔:什么缓存?什么缓冲区?没有包含所有潜在算法的“C#代码缓冲/速度助手”,这就是我要求澄清的原因。正如zmbq所提到的,编译器和CPU缓存等底层结构对真实世界的性能非常重要,应该在基准测试中进行衡量。要衡量C#代码的性能,你必须“关心”代码以及它在做什么。否则你的价值观很可能毫无意义。