Tag: performance

.Net – 什么时候是List .ForEach优先于标准的foreach循环?

通用列表类具有.ForEach(Action action)方法。 现在我已经完成了一些关于它们如何表现的简单时间,似乎通用的ForEach是较差的表演者。 (Snippet Compiler Friendly)代码如下 – public static class timer{ public static long foreachloop = 0; public static long Gforeachloop = 0;} public class something{ public List myStrings = new List(); public something() { for(int i = 1; i<=5000000;i++) { myStrings.Add(i.ToString()); } }} public class cls1{ private static List Strings = new List(); private […]

IEnumerable为DataTable性能问题

我有以下扩展,它从IEnumerable生成一个DataTable : public static DataTable AsDataTable(this IEnumerable enumerable) { DataTable table = new DataTable(); T first = enumerable.FirstOrDefault(); if (first == null) return table; PropertyInfo[] properties = first.GetType().GetProperties(); foreach (PropertyInfo pi in properties) table.Columns.Add(pi.Name, pi.PropertyType); foreach (T t in enumerable) { DataRow row = table.NewRow(); foreach (PropertyInfo pi in properties) row[pi.Name] = t.GetType().InvokeMember(pi.Name, BindingFlags.GetProperty, null, […]

EWS:Exchange Web服务。 多次调用ResolveName – Perfomance Hit(当然)

您好Stackoverflow社区, 我通过EWS从一个Outlook帐户加载所有Exchange Outlook联系人。 不幸的是,当联系人的电子邮件地址在我们自己的Active Directory中时,它会被转换为不同的格式(/ o = …; ou = …; cn = …)。 要将其转换为常规电子邮件地址,我使用的是EWS-Service对象的ResolveName方法。 现在问题是:我循环遍历FindItems结果的所有项目,将返回的数据映射到我自己的C#类。 在这个循环中,我必须调用ResolveName-Method,它总是导致对EWS的调用。 说到几个联系人,这需要一些时间。 我已经缓存了以前解决过的地址。 但是,当然,第一次通话时会有这种性能受到打击。 问题显然是:有没有办法减少这个名称 – 解决电子邮件的问题? 提前致谢! 我在循环内部的调用: EmailAddress email; if (contact.EmailAddresses.TryGetValue(EmailAddressKey.EmailAddress1, out email)) { person.Email = GetResolvedEmailAddress(email.Address, svc); } GetResolvedName-Method(用于缓存): private static Dictionary ResolvedEmailAddressCache = new Dictionary(); private static String GetResolvedEmailAddress(string address, ExchangeService svc) { if (ResolvedEmailAddressCache.ContainsKey(address)) […]

哪种模式更适合SqlConnection对象?

哪种模式更适合SqlConnection对象? 哪个性能更好? 你提供任何其他模式吗? class DataAccess1 : IDisposable { private SqlConnection connection; public DataAccess1(string connectionString) { connection = new SqlConnection(connectionString); } public void Execute(string query) { using (SqlCommand command = connection.CreateCommand()) { command.CommandText = query; command.CommandType = CommandType.Text; // … command.Connection.Open(); command.ExecuteNonQuery(); command.Connection.Close(); } } public void Dispose() { connection.Dispose(); } } VS class DataAccess2 : […]

DataTable选择具有多个AND条件的实现

我有一个大约有50,000行的DataTable,我正在使用DataTable.Select从中检索行。 Select需要多个AND条件,包括通配符匹配。 我玩过,发现通过多步执行相同的Select ,可以大大减少执行时间,但更改AND语句的顺序不会影响它。 //This takes ~ 750 ms DataRow[] results = myDataTable.Select(“Field1 LIKE ‘*” + term1 + “*'” + “AND Field2 = ‘” + term2 + “‘” + “AND Field3 = ‘” + term3 + “‘”); //This also takes ~750 ms DataRow[] results2 = myDataTable.Select(“Field3 = ‘” + term3 + “‘” + “AND Field2 […]

比较Entity Framework 5中Any()与Count()的生成查询的性能

在我的项目中,我使用Entity Framework 4.4.0.0,我遇到了以下两难困境。 我必须检查用户是否被激活。 我的查询看起来像: 任何() _context.Users.Any(u => u.Id == userId && u.IsActivated); 生成的sql是: SELECT CASE WHEN ( EXISTS (SELECT 1 AS [C1] FROM [dbo].[Users] AS [Extent1] WHERE ( [Extent1].[Id] = @p__linq__0 ) AND ( [Extent1].[IsActivated] = 1 )) ) THEN cast(1 AS BIT) WHEN ( NOT EXISTS (SELECT 1 AS [C1] FROM [dbo].[Users] AS […]

SQLite:.Net比本机慢得多?

这是我的查询: SELECT * FROM [GeoName] WHERE ((-26.3665122100029-Lat)*(-26.3665122100029-Lat))+((27.5978928658078-Long)*(27.5978928658078-Long)) < 0.005 ORDER BY ((-26.3665122100029-Lat)*(-26.3665122100029-Lat))+((27.5978928658078-Long)*(27.5978928658078-Long)) LIMIT 20 这将返回20个最近点。 在本机sqlite中运行它会在78ms内返回一个结果,但是在.Net sqlite环境中,它需要将近1400ms。 有什么建议? 我在我的ORM结构中使用参数化值进行此查询。 还尝试过将其作为原生文本查询。 运行查询的代码(在我的ORM层中): private static IDataReader CallSqlReader(string SqlStatement, Dictionary parameters) { ConnectionCheck(); try { var cmd = conn.CreateCommand(); cmd.CommandText = SqlStatement; cmd.CommandType = CommandType.Text; foreach (var item in parameters) { cmd.Parameters.AddWithValue(item.Key, item.Value); } return cmd.ExecuteReader(); } catch […]

如何防止在屏幕外绘制XNA组件?

我在XNA做了一场2D比赛。 使用可绘制的游戏组件哪一个更好的性能? 1.当组件未在屏幕上时,将其从组件列表中删除,并在其屏幕上添加它。 2.当它的屏幕外不运行其绘制function时(通过使用“清醒”bool字段和绘制函数中的所有内容的if语句) 我现在正在使用方法2,它工作正常。 它方便的cus组件的draworder不会改变(如果我删除并重新添加它们,我将需要更多的代码来管理它)事实上它只是发生在我身上,如果它不在组件列表中它不会更新我还需要别的东西来跟踪它是否在屏幕上…… 此外,我没有配置探测器的视觉工作室的花哨版本所以我只是问这里人们从他们的经验中想到了什么

如何提高反序列化速度?

使用BinaryFormatter进行序列化/反序列化,生成的序列化文件大小约为80MB。 反序列化需要几分钟。 我怎么能改进这个? 这是反序列化代码: public static Universe DeserializeFromFile(string filepath) { Universe universe = null; FileStream fs = new FileStream(filepath, FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); try { universe = (Universe)bf.Deserialize(fs); } catch (SerializationException e) { Console.WriteLine(“Failed to deserialize. Reason: ” + e.Message); throw; } finally { fs.Close(); } return universe; } 也许在反序列化之前读取所有内存或使用其他一些序列化技术?

询问MethodInfo需要多少参数的最有效方法是什么?

如果MethodInfo接受参数,那么询问MethodInfo的最有效方法是什么?如果接受,有多少? 我目前的解决方案是: methodInfo.GetParameters().Any()和methodInfo.GetParameters().Count() 。 这是最有效的方式吗? 由于我实际上并不需要任何ParameterInfo对象,有没有办法在不调用GetParameters()情况下执行此操作?