小编Ian*_*oyd的帖子

如何加快向ListView添加项目的速度?

我正在向WinForms ListView添加几千个(例如53,709个)项.

尝试1:13,870 ms

foreach (Object o in list)
{
   ListViewItem item = new ListViewItem();
   RefreshListViewItem(item, o);
   listView.Items.Add(item);
}
Run Code Online (Sandbox Code Playgroud)

这非常糟糕.明显的第一个解决方法是打电话BeginUpdate/EndUpdate.

尝试2:3,106 ms

listView.BeginUpdate();
foreach (Object o in list)
{
   ListViewItem item = new ListViewItem();
   RefreshListViewItem(item, o);
   listView.Items.Add(item);
}
listView.EndUpdate();
Run Code Online (Sandbox Code Playgroud)

这样更好,但仍然是一个数量级太慢.让我们将ListViewItems的创建与添加ListViewItems分开,因此我们找到了真正的罪魁祸首:

尝试3:2,631 ms

var items = new List<ListViewItem>();
foreach (Object o in list)
{
   ListViewItem item = new ListViewItem();
   RefreshListViewItem(item, o);
   items.Add(item);
}

stopwatch.Start();

listView.BeginUpdate();
    foreach (ListViewItem item in items)
        listView.Items.Add(item));
listView.EndUpdate();

stopwatch.Stop() …
Run Code Online (Sandbox Code Playgroud)

c# performance listview winforms

81
推荐指数
2
解决办法
5万
查看次数

如何验证域凭据?

我想针对域控制器验证一组凭据.例如:

Username: STACKOVERFLOW\joel
Password: splotchy
Run Code Online (Sandbox Code Playgroud)

方法1.使用模拟查询Active Directory

很多人建议查询Active Directory.如果抛出异常,那么您知道凭据无效 - 正如此stackoverflow问题中所建议的那样.

然而,这种方法有一些严重的缺点:

  1. 您不仅要对域帐户进行身份验证,还要进行隐式授权检查.也就是说,您正在使用模拟令牌从AD中读取属性.如果其他有效帐户无权从AD读取,该怎么办?默认情况下,所有用户都具有读取权限,但可以将域策略设置为禁用受限帐户(和/或组)的访问权限.

  2. 绑定AD会产生严重的开销,必须在客户端加载AD架构缓存(DirectoryServices使用的ADSI提供程序中的ADSI缓存).这既是网络又是AD服务器,消耗资源 - 而且对于像验证用户帐户这样的简单操作来说太昂贵了.

  3. 您依赖于非例外情况的异常失败,并假设这意味着无效的用户名和密码.然后,其他问题(例如,网络故障,AD连接故障,内存分配错误等)被错误地表示为身份验证失败.

方法2. LogonUser Win32 API

其他人建议使用LogonUser()API函数.这听起来不错,但不幸的是,调用用户有时需要一个权限,通常只给操作系统本身:

调用LogonUser的进程需要SE_TCB_NAME权限.如果调用进程没有此权限,LogonUser将失败,GetLastError将返回ERROR_PRIVILEGE_NOT_HELD.

在某些情况下,调用LogonUser的进程还必须启用SE_CHANGE_NOTIFY_NAME权限; 否则,LogonUser失败,GetLastError返回ERROR_ACCESS_DENIED.作为管理员组成员的本地系统帐户或帐户不需要此权限.默认情况下,为所有用户启用SE_CHANGE_NOTIFY_NAME,但某些管理员可能会为所有用户禁用它.

省高院" 法案作为操作系统的一部分 "特权是不是你想要做无可奈何的东西-作为微软在一份指出知识库文章:

...调用LogonUser的进程必须具有SE_TCB_NAME权限(在用户管理器中,这是" 作为操作系统的一部分 "权限).SE_TCB_NAME权限非常强大, 不应授予任何任意用户,以便他们可以运行需要验证凭据的应用程序.

此外,LogonUser()如果指定了空密码,则调用将失败.


验证一组域凭据的正确方法是什么?


碰巧是从托管代码调用,但这是一个普通的Windows问题.可以假设客户已安装.NET Framework 2.0.

c# windows security authentication

79
推荐指数
3
解决办法
11万
查看次数

如何在GAC中注册.NET DLL文件?

我已经创建了一个.NET .DLL文件,我想在GAC中注册.

我在Windows Server 2003命令提示符中使用了此命令:

C:\"Path of dll"\>gacutil /i dllname.dll
'gacutil' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

它说路径不正确.

我是否需要在.NET cmd提示符中使用它?如果是这样,我无法找到.NET cmd提示符.

c# gac dllregistration

78
推荐指数
6
解决办法
27万
查看次数

解密.NET clr20r3异常参数P1..P10

我试图破解P1 ... P10参数的含义,clr20r3当我的应用程序遇到异常时,该参数与写入事件日志的参数相关联.

能找到的最好的是:

  • P1:托管过程(例如 w3wp.exe)
  • P2:托管流程版本(例如 6.0.3790.1830)
  • P3:??? (例如 42435be1)
  • P4:引发异常的程序集(例如 mrtables.webservice)
  • P5:装配版本(例如 2.1.2.0)
  • P6:??? (例如 4682617f)
  • P7:??? (例如 129)
  • P8:??? (例如 50)
  • P9:引发的异常类型(例如 system.argumentexception)
  • P10:??? (例如 NIL)

用于clr20r3的Google搜索提供了数千个样本参数值,有人可以尝试从中派生模式.

但我希望有关于参数含义的文档,而不是有根据的猜测.


编辑:虽然我可以希望规范文档,但我真的很高兴看到异常被抛出,在什么行,完成堆栈跟踪.

奖金阅读

.net clr exception

76
推荐指数
2
解决办法
3万
查看次数

如何在onKeyPress期间获取输入文本框的文本?

我试图在文本框中输入文本,因为用户输入了文本(jsfiddle playground):

function edValueKeyPress() {
    var edValue = document.getElementById("edValue");
    var s = edValue.value;

    var lblValue = document.getElementById("lblValue");
    lblValue.innerText = "The text box contains: " + s;

    //var s = $("#edValue").val();
    //$("#lblValue").text(s);    
}
Run Code Online (Sandbox Code Playgroud)
<input id="edValue" type="text" onKeyPress="edValueKeyPress()"><br>
<span id="lblValue">The text box contains: </span>
Run Code Online (Sandbox Code Playgroud)

代码运行没有错误,但该的中input text框,期间onKeyPress总是值之前的变化:

在此输入图像描述

问题:如何获取文本框的文本onKeyPress

奖金Chatter

在HTML DOM中有三个与"用户正在输入"相关的事件:

  • onKeyDown
  • onKeyPress
  • onKeyUp

Windows中,WM_Key当用户按住某个键时,消息的顺序变得很重要,并且该键开始重复:

  • WM_KEYDOWN('a')- 用户按下了A
  • WM_CHAR('a')- a已收到用户的字符 …

html javascript input onkeypress

76
推荐指数
4
解决办法
23万
查看次数

如何从SQL Server中的表中查询Xml值和属性?

我有一个包含Xml列的表:

SELECT * 
FROM Sqm
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

xml一行数据的样本将是:

<Sqm version="1.2">
  <Metrics>
    <Metric id="TransactionCleanupThread.RecordUsedTransactionShift" type="timer" unit="µs" count="1" sum="21490"   average="21490"   minValue="73701"    maxValue="73701"                               >73701</Metric>
    <Metric id="TransactionCleanupThread.RefundOldTrans"             type="timer" unit="µs" count="1" sum="184487"  average="184487"  minValue="632704"   maxValue="632704"                              >632704</Metric>
    <Metric id="Database.CreateConnection_SaveContextUserGUID"       type="timer" unit="µs" count="2" sum="7562"    average="3781"    minValue="12928"    maxValue="13006"    standardDeviation="16"     >12967</Metric>
    <Metric id="Global.CurrentUser"                                  type="timer" unit="µs" count="6" sum="4022464" average="670411"  minValue="15"       maxValue="13794345" standardDeviation="1642047">2299194</Metric>
    <Metric id="Global.CurrentUser_FetchIdentityFromDatabase"        type="timer" unit="µs" count="1" sum="4010057" average="4010057" minValue="13752614" maxValue="13752614"                            >13752614</Metric>
  </Metrics>
</Sqm>
Run Code Online (Sandbox Code Playgroud)

对于这些数据,我希望:

SqmId  id                                                   type   unit  count  sum      minValue  maxValue  standardDeviation  Value
=====  ===================================================  =====  ==== …
Run Code Online (Sandbox Code Playgroud)

xml sql-server sql-server-2005 sqlxml sql-server-2008-r2

76
推荐指数
4
解决办法
21万
查看次数

如何在Javascript中设置HTML5必需属性?

我试图在Javascript text中根据需要标记输入框.

<input id="edName" type="text" id="name">
Run Code Online (Sandbox Code Playgroud)

如果该字段最初标记为required:

<form>
    <input id="edName" type="text" id="name" required><br>
    <input type="submit" value="Search">
</form>
Run Code Online (Sandbox Code Playgroud)

当用户尝试提交时,他们会收到验证错误:

在此输入图像描述

但现在我想通过Javascript required"运行时"设置属性:

<form>
    <input id="edName" type="text" id="name"><br>
    <input type="submit" value="Search">
</form>
Run Code Online (Sandbox Code Playgroud)

与相应的脚本:

//recommended W3C HTML5 syntax for boolean attributes
document.getElementById("edName").attributes["required"] = "";         
Run Code Online (Sandbox Code Playgroud)

除非我现在提交,否则没有验证检查,没有阻止.

设置HTML5验证布尔属性正确方法是什么?

的jsfiddle

你问,这个属性有什么价值?

HTML5验证required属性记录Boolean:

4.10.7.3.4 required属性

required属性是布尔属性.指定时,元素是必需的.

关于如何定义boolean属性有很多令人费解的事.HTML5规范说明:

元素上存在布尔属性表示真值,缺少属性表示false值.

如果该属性存在,则其值必须是空字符串,或者是属性的规范名称的ASCII不区分大小写匹配的值,没有前导或尾随空格.

这意味着您可以通过两种不同的方式指定required 布尔属性:

edName.attributes.required …
Run Code Online (Sandbox Code Playgroud)

javascript validation html5

75
推荐指数
4
解决办法
17万
查看次数

如何在C#中为类名设置别名,而不必为每个使用该类的文件添加一行代码?

我想为类名创建一个别名.以下语法将是完美的:

public class LongClassNameOrOneThatContainsVersionsOrDomainSpecificName
{
   ...
}

public class MyName = LongClassNameOrOneThatContainsVersionOrDomainSpecificName;
Run Code Online (Sandbox Code Playgroud)

但它不会编译.


注意此示例仅供参考.不要试图通过建议改变整个系统的设计来解决这个特殊问题.此示例的存在或缺乏不会改变原始问题.

一些现有代码依赖于静态类的存在:

public static class ColorScheme
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

此配色方案是Outlook 2003配色方案.我想介绍一个Outlook 2007配色方案,同时保留Outlook 2003配色方案:

public static class Outlook2003ColorScheme
{
   ...
}

public static class Outlook2007ColorScheme
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

但我仍然面临这样一个事实,即代码依赖于名为ColorScheme的静态类的存在.我的第一个想法是创建一个ColorScheme类,我将从Outlook2003或Outlook2007下载:

public static class ColorScheme : Outlook2007ColorScheme
{
}
Run Code Online (Sandbox Code Playgroud)

但你不能从静态类下降.

我的下一个想法是创建静态ColorScheme类,但使Outlook2003ColorScheme和Outlook2007ColorScheme类非静态.然后静态ColorScheme类中的静态变量可以指向"true"颜色方案:

public static class ColorScheme
{
    private static CustomColorScheme = new Outlook2007ColorScheme();
    ...
}

private class CustomColorScheme 
{ 
   ...
}

private class Outlook2008ColorScheme : CustomColorScheme 
{
    ...
} …
Run Code Online (Sandbox Code Playgroud)

c# class-design

71
推荐指数
7
解决办法
7万
查看次数

单个SQL Server语句是原子的还是一致的?

是SQL Server中的声明ACID吗?

我是什么意思

给定一个未包装在BEGIN TRANSACTION/ COMMIT TRANSACTION中的T-SQL语句是该语句的操作:

  • 原子:要么执行所有数据修改,要么不执行任何数据修改.
  • 一致:完成后,事务必须使所有数据保持一致状态.
  • 隔离:并发事务所做的修改必须与任何其他并发事务所做的修改隔离.
  • 持久:交易完成后,其效果将永久存在于系统中.

我问的原因

我在实时系统中有一个声明似乎违反了查询规则.

实际上我的T-SQL语句是:

--If there are any slots available, 
--then find the earliest unbooked transaction and mark it booked
UPDATE Transactions
SET Booked = 1
WHERE TransactionID = (
   SELECT TOP 1 TransactionID
   FROM Slots
      INNER JOIN Transactions t2
      ON Slots.SlotDate = t2.TransactionDate
   WHERE t2.Booked = 0 --only book it if it's currently unbooked
   AND Slots.Available > 0 --only book …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2

67
推荐指数
1
解决办法
2万
查看次数

C#!条件属性?

C#有一个没有 Conditional(!Conditional,NotConditional,Conditional(!))属性?


我知道C#有一个Conditional属性:

[Conditional("ShowDebugString")]
public static void ShowDebugString(string s)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

这相当于1:

public static void ShowDebugString(string s)
{
#if ShowDebugString
   ...
#endif
}
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我想要反向行为(你必须明确选择退出):

public static void ShowDebugString(string s)
{
#if !RemoveSDS
   ...
#endif
}
Run Code Online (Sandbox Code Playgroud)

这让我尝试:

[!Conditional("RemoveSDS")]
public static void ShowDebugString(string s)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

哪个不编译.和:

[Conditional("!RemoveSDS")]
public static void ShowDebugString(string s)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

哪个不编译.和:

[NotConditional("RemoveSDS")]
public static void ShowDebugString(string s) …
Run Code Online (Sandbox Code Playgroud)

c# conditional conditional-compilation

63
推荐指数
5
解决办法
2万
查看次数