Tag: 性能

Array.Count()比List.Count()慢得多

使用IEnumerable Count()的扩展方法时,数组至少比列表慢两倍。 Function Count() List 2,299 int[] 6,903 差异来自哪里? 我知道两者都在调用ICollection的Count属性: 如果源的类型实现ICollection,则该实现用于获取元素的数量。 否则,此方法确定计数。 对于列表,它返回List.Count ,对于array, Array.Length 。 而且, Array.Length应该比List.Count 。 基准测试: class Program { public const long Iterations = (long)1e8; static void Main() { var list = new List(){1}; var array = new int[1]; array[0] = 1; var results = new Dictionary(); results.Add(“List”, Benchmark(list, Iterations)); results.Add(“int[]”, […]

用于C#的快速线程安全随机数发生器

我需要在多个正在运行的线程中快速生成随机浮点数。 我尝试过使用System.Random ,但它对我的需求来说太慢了,它在多个线程中返回相同的数字。 (当我在一个线程中运行我的应用程序时,它工作正常。)另外,我需要确保生成的数字在0到100之间。 这就是我现在正在尝试的事情: number = random.NextDouble() * 100; 我该怎么办呢?

如何在堆栈上分配数组以获得性能提升?

一些最佳版本的函数,如popcount和count consecutive zeros使用表查找来获得最终答案。 在C和C ++中,可以在堆栈上分配数组并快速访问它们。 有没有办法在C#中做到这一点? 据我所知, stackalloc只能在函数中使用,因此数组不会持久存在。 我有一个小的查找表,我希望能够尽快访问,因此更愿意在堆栈而不是堆上分配它。

需要加速自动化…需要32秒才能完成113个对象

嗨我有一些自动映射器的主要问题,它很慢。 我不知道如何加快速度。 我正在使用nhibernate,流利的nhibernate和asp.net mvc 3.0 [Serializable()] public class Test { public virtual int Id { get; private set; } public virtual string Name { get; set; } public virtual string Description { get; set; } public virtual DateTimeDate { get; set; } public virtual IList Reminders { get; set; } public virtual IList Reminders2 { […]

C#:如何实现智能缓存

我有一些地方可以实现某种缓存。 例如,在基于自定义字符串执行资源查找,使用reflection查找属性名称或每个属性名称只有一个PropertyChangedEventArgs 。 最后一个简单的例子: public static class Cache { private static Dictionary cache; static Cache() { cache = new Dictionary(); } public static PropertyChangedEventArgs GetPropertyChangedEventArgs( string propertyName) { if (cache.ContainsKey(propertyName)) return cache[propertyName]; return cache[propertyName] = new PropertyChangedEventArgs(propertyName); } } 但是,这会运作良好吗? 例如,如果我们有一大堆不同的propertyNames,那就意味着我们最终会有一个巨大的缓存,从来没有垃圾收集或任何东西。 我在想如果缓存的内容是更大的值,如果应用程序是一个长期运行的应用程序,这可能最终会成为一个问题……或者你怎么看? 如何实现好的缓存? 对于大多数用途,这个是否足够好? 一些很好的缓存实现的例子,这些实现不是很难理解,也不太复杂而无法实现?

如何以不同的速度平滑地动画Windows窗体位置?

我一直试图平滑地动画一些Windows窗体位置,但如果我希望速度可变,我会遇到一些问题。 换句话说,如果我想让用户选择动画的首选速度。 我发现以下文章帮助我执行了我正在寻找的动画,对于我的表单。 在各方面看起来比我过去尝试过的BackgroundWorker或Threads方法更好: http : //www.vcskicks.com/animated-windows-form.html 我现在唯一的问题是,如果我想要动画的速度不同,可以保持平滑的动画效果。 在我的代码FPS和PX中有两个重要的值。 FPS表示每秒帧数(除此之外),PX表示移动表单的像素数。 问题1)为了获得最流畅的动画,我希望一次只能移动1px,但我认为我不能像我想的那样快速移动表单。 将FPS值增加到非常高的值似乎没有任何影响,就像有限制并且超过该限制,将没有明显的差异。 我确信这有一个很好的解释。 我的问题是:你对这个问题有什么好的解决方案,或者唯一的解决办法就是改变PX值并将表格移动1px以上,如果我想要更快的移动? 问题2)如果上述问题的解决方案是相应地更改PX值,我发现(通过测试不同的值)FPS值等于300就足以满足我的需要,我可以根据需要快速移动表单它来。 然后,如果我想要10个速度,将表格移动1,2,3,4,5,6,7,8,9和10个像素可以提供缓慢而快速的平滑动画,就像我想要的那样。 如果我想要5种速度,我可以使用2,4,6,8,10等。 我的问题是:对于FPS使用300这样的值有什么问题吗? 对这样的价值有不良后果吗? 这是我目前的代码: public partial class Form1 : Form { bool dir = true; public Form1() { InitializeComponent(); Location = new Point(1280/2 – Width, 800/2 – Height/2); } private void button1_Click(object sender, EventArgs e) { double FPS = […]

Lucene.Net模糊搜索速度

对不起,我希望得到Lucene经验丰富的人的帮助。 现在我们在我们的应用程序Lucene.Net 3.0.3中使用~2.500.000项目进行索引和搜索。 每个实体包含27个可搜索字段,以这种方式添加到索引:new Field(key,value,Field.Store.YES,Field.Index.ANALYZED)) 现在我们有两个搜索选项: 使用模糊搜索仅搜索4个字段 使用精确搜索按4-27个字段搜索 我们有一个搜索服务,每周自动搜索约53000人,如“Bob Huston”,“Sara Conor”,“Sujan Hong Uin Ho”等。 因此,我们在选项1中遇到慢速搜索速度, s an average 4-8 sec in searcher.Search and it搜索速度为s an average 4-8 sec in searcher.Search and it是我们的主要问题。 搜索示例代码: var index = FSDirectory.Open(indexPath); var searcher = new IndexSearcher(index, true); this.analyzer = new StandardAnalyzer(Version.LUCENE_30, new HashSet()) var queryParser = new MultiFieldQueryParser(Version.LUCENE_30, queryFields, […]

来自TextFile的Lifeupdate DataGrid具有良好的性能

实际状态: 我有一个带有4列的DataGrid (Icon | DateTime | LogLevel | Message) 我用它作为查看器来呈现LogFile条目。 打开Window ,UI滞后,很多条目逐个添加到DataGrid 。 注意:我已经在使用多个线程。 我的UI-Thread没有冻结。 它只是采取长期填充整个DataGrid 。 我想要的是: 在向用户展示之前,我更喜欢“预渲染”整个窗口之类的东西。 当我打开Window一次 – 每次我再次打开它时,它就不再有问题了。(不能渲染新的……?) 我试过的: 将Visibility设置为Hidden并等待( Thread.Sleep() )10秒然后设置Visibility = Visibility.Visible ; 在ViewModel-Constructor中将所有数据添加到我的DataGrid中 但这一切并没有真正解决它。 我甚至不确定它是C#代码还是只是Bindings …… 这可能是一个愚蠢的问题,但有没有办法在显示之前“预渲染” DataGrid及其Content ? 编辑: 我也使用一些DataTriggers来设置RowColor,但这可能不是问题。 这是我使用的一些代码: 入门级: public class LogEntry { public string LogLevel { get; set; } public string LogLevelIcon { […]

在每个非查询或整个连接之前打开连接?

如果我有大约2000 record ,我会进行多次插入。 哪种方法比其他方法有更好的性能? 连接每个插入。并在插入后关闭。 一个连接用于整个批量并在最后关闭连接。 那么在这种情况下连接超时呢。 备注 : 数据库是informix db。 插入约6000条记录大约需要3.5到4分钟。(第一种方法)

在C#中将Bitmap转换为布尔数组的快速方法?

我正在制作一个XNA应用程序,我从网络摄像头捕获屏幕截图每秒4次,然后当像素颜色红色低于某个阈值时我尝试将其转换为布尔数组。 当我将它转换为Texture2D时,它不会滞后,但是当我尝试获取单个像素时,它确实会滞后,即使网络摄像头分辨率为176×144。 这是获取位图的代码: public Bitmap getBitmap() { if (!panelVideoPreview.IsDisposed) { Bitmap b = new Bitmap(panelVideoPreview.Width, panelVideoPreview.Height, PixelFormat.Format32bppRgb); using (Graphics g = Graphics.FromImage(b)) { Rectangle rectanglePanelVideoPreview = panelVideoPreview.Bounds; Point sourcePoints = panelVideoPreview.PointToScreen(new Point(panelVideoPreview.ClientRectangle.X, panelVideoPreview.ClientRectangle.Y)); g.CopyFromScreen(sourcePoints, Point.Empty, rectanglePanelVideoPreview.Size); } return b; } else { Bitmap b = new Bitmap(panelVideoPreview.Width, panelVideoPreview.Height); return b; } } 这是将Bitmap转换为布尔数组的代码: public bool[,] […]