Tag: 性能

如何在C#(托管代码)中获得* THREAD *的CPU使用率和/或RAM使用率?

我知道如何获得进程的CPU使用率和内存使用率,但我想知道如何在每个线程级别上获取它。 如果最好的解决方案是做一些P-Invoking,那也没关系。 我需要的例子: Thread myThread = Thread.CurrentThread; // some time later in some other function… Console.WriteLine(GetThreadSpecificCpuUsage(myThread));

枚举和表现

我的应用程序有很多不同的查找值,这些值永远不会改变,例如美国各州。 我想使用枚举,而不是将它们放入数据库表中。 但是,我确实意识到这样做需要一些枚举和大量的“int”和“string”来自我的枚举。 另外,我看到有人提到使用Dictionary 作为查找表,但枚举实现似乎更清晰。 所以,我想问一下,保留和传递很多枚举并将它们转化为性能问题,还是应该使用查找表方法,哪个表现更好? 编辑:需要转换为ID以存储在其他数据库表中。

multithreading是否会提高单处理器的计算速度

在单个处理器上,multithreading是否会增加计算速度。 众所周知,multithreading用于提高用户响应能力,并通过分离UI线程和计算线程来实现。 但是让我们谈谈控制台应用程序。 multithreading是否会提高计算速度。 当我们通过multithreading计算时,我们是否能更快地得到计算结果。 那么在多核上,multithreading会不会增加速度。 请帮我。 如果您有任何材料可以了解有关线程的更多信息。 请发布。 编辑:我被问到一个问题,在任何给定的时间,只允许一个线程在一个核心上运行。 如果是这样,为什么人们在控制台应用程序中使用multithreading。 哈尔莎,提前谢谢

使用预先计算的平移arrays的快速Sin / Cos

我有以下代码使用预先计算的内存表进行Sin / Cos函数。 在下面的示例中,该表具有1024 * 128个项目,涵盖从0到2pi的所有Sin / Cos值。 我知道我可以使用Sin / Cos对称并只保留1/4的值,但是在计算值时我会有更多’ifs’。 private const double PI2 = Math.PI * 2.0; private const int TABLE_SIZE = 1024 * 128; private const double TABLE_SIZE_D = (double)TABLE_SIZE; private const double FACTOR = TABLE_SIZE_D / PI2; private static double[] _CosineDoubleTable; private static double[] _SineDoubleTable; 设置转换表 private static void InitializeTrigonometricTables(){ _CosineDoubleTable […]

检索进程网络使用情况

如何获取进程发送/接收字节? 首选方法是使用C#。 我搜索了很多,但我没有找到任何简单的解决方案。 一些解决方案建议在机器上安装WinPCap并使用此lib。 喜欢这个人问: 在托管代码中需要“具有网络活动的进程”function – 就像resmon.exe一样,我不想要lib的开销。 有一个简单的解决方案吗? 实际上我想要Windows资源监视器在“带网络活动的进程”选项卡下提供的确切数据: Windows的资源监视器如何获取此信息? 任何例子? 此外,尝试使用此处提到的计数器方法: 发送/接收的网络丢失但没有成功 – 因为并非每个进程都显示在此计数器下。 我再次想知道资源监视器如何在不使用此计数器的情况下获取此信息…

Windows窗体:使用BackgroundImage会减慢窗体控件的绘制速度

我有一个Windows窗体(C#.NET 3.5),上面有许多按钮和其他控件,全部分配给一个跨越整个窗体的最顶层面板。 例如,层次结构为:Form – > Panel – >其他控件。 一旦我将BackgroundImage分配给Panel,控件就会非常缓慢地绘制。 如果我使用Form的BackgroundImage属性并将Panel的BackgroundColor设置为“transparent”,我会有同样的效果。 看起来好像首先绘制了具有背景的窗口,然后在绘制下一个控件之前稍微延迟逐个添加每个控件。 换句话说,您实际上可以按照每个控件绘制到窗体的顺序。 一旦所有控件都被绘制,一旦此效果不再发生,但表单的响应性仍然很慢。 在Visual Studio的设计器中,我得到了相同的效果,尤其是在移动控件时。 有时表单的绘图完全停止一两秒,这使得在设计器和生成的应用程序中使用BackgroundImage是一个完全的拖拽。 当然,我尝试使用DoubleBuffered = true,我也使用reflection在所有控件上设置它,没有任何效果。 此外,这里是加载代码的表单,因为它有点不寻常。 它将所有控件从另一个表单复制到当前表单上。 这样做是为了能够使用设计者分别编辑每个屏幕的视觉外观,同时共享通用表单和公共代码基础。 我预感它可能是减速的原因,但它仍然无法解释为什么减速器已经在设计师中引人注目。 private void LoadControls(Form form) { this.SuspendLayout(); this.DoubleBuffered = true; EnableDoubleBuffering(this.Controls); this.BackgroundImage = form.BackgroundImage; this.BackColor = form.BackColor; this.Controls.Clear(); foreach (Control c in form.Controls) { this.Controls.Add(c); } this.ResumeLayout(); } 如您所见, SuspendLayout()和ResumeLayout()用于避免不必要的重绘。 尽管如此,一旦使用BackgroundImage,表单就像“地狱一样慢”。 我甚至尝试将其转换为PNG,JPG和BMP,看看是否有任何区别。 此外,图像尺寸为1024×768,但较小的图像具有相同的减速效果(尽管略小)。 […]

C#.NET:如何检查我们是否使用电池运行?

如果我们通过远程桌面运行或使用电池运行,我想成为一名优秀的开发者公民, 支付我的税 ,并禁用一些东西。 如果我们在远程桌面上运行(或等效于终端服务器会话),我们必须禁用动画和双缓冲。 您可以通过以下方式检查: /// /// Indicates if we’re running in a remote desktop session. /// If we are, then you MUST disable animations and double buffering ie Pay your taxes! /// /// /// public static Boolean IsRemoteSession { //This is just a friendly wrapper around the built-in way get { return System.Windows.Forms.SystemInformation.TerminalServerSession; } […]

在C#中,BitArray获取比特值比使用逐位移位的简单结合更快吗?

1)。 var bitValue = (byteValue & (1 << bitNumber)) != 0; 2)。 使用带有Get(int index)方法的System.Collections.BitArray 什么更快? 在.NET项目的什么情况下, BitArray比按位移位的简单连接更有用?

C#’ref’关键字,性能

如果你有一个Bitmap对象需要传递给众多方法(大约10个),最后到一个事件,它将在它被使用后最终被处理掉,是否(性能明智)将它传递给每一个那些方法通过引用而不是价值? 按值传递,对象被复制,而不是通过引用传递。 (在这种情况下,性能至关重要。应用程序需要尽可能快地运行。)

Dictionary Keys.Contains vs. ContainsKey:它们在function上是否相同?

我很想知道这两个在所有情况下是否在function上都是等效的。 是否有可能通过更改字典的默认比较器,这两者在function上会有所不同? 还有, Keys.Contains几乎不保证会变慢吗?