我正在尝试在我正在建立的网站上实施Google建议的内容,并且很好奇如何在非常大的数据集上进行操作.当然,如果您有1000个项目,则缓存项目并循环浏览它们.但是当你有一百万件商品时,你怎么做呢?此外,假设项目不是一个单词.具体来说,我对Pandora.com印象非常深刻.例如,如果您搜索"湿",它会带回"湿沙",但它也会带回Toad The Wet Sprocket.他们的自动完成功能很快.我的第一个想法是按前两个字母对项目进行分组,所以你会有类似的东西:
Dictionary<string,List<string>>
Run Code Online (Sandbox Code Playgroud)
其中键是前两个字母.那没关系,但是如果我想做类似Pandora的事情并允许用户看到与字符串中间匹配的结果呢?根据我的想法:Wet永远不会匹配Toad the Wet Sprocket,因为它将在"TO"桶而不是"WE"桶中.那么也许你可以把弦分开,"Toad the Wet Sprocket"进入"TO","WE"和"SP"桶(去掉"THE"这个词),但当你谈到一百万可能不得不说几句话的条目,似乎你很快就开始耗费大量的记忆.好的,这是一个很长的问题.思考?
在Visual Studio 2010中,如果转到项目的属性并转到"构建"选项卡,则会出现"定义TRACE常量"复选框.这相当于做#define TRACE.
System.Diagnostics.Trace的所有方法都有[Conditional("TRACE")]它们.
我的问题是你为什么要把它关掉?我的意思是,如果你没有定义任何跟踪侦听器,那么就好像你要填满日志或其他内容.这让我觉得很奇怪.如果您正在努力调用Trace,为什么不想通过App/Web.config来控制它,而是通过编译器开关来控制它,这样就排除了重新启用它的可能性.重新编译.
我错过了什么吗?当然,它不能对性能有害,对吧?
是否有可能使此测试不会抛出异常?似乎将任何非GACed类添加到逻辑调用上下文中会导致在测试的第2行中抛出异常.
测试'TestProject1.UnitTest1.TestMethod1'失败:测试方法TestProject1.UnitTest1.TestMethod1引发异常:System.Configuration.ConfigurationErrorsException:加载配置文件时出错:成员'TestProject1.Bar,TestProject1,Version = 1.0的类型未解析.0.0,Culture = neutral,PublicKeyToken = null'.---> System.Runtime.Serialization.SerializationException:成员'TestProject1.Bar,TestProject1,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'的类型未解析.
namespace TestProject1 {
[ Serializable]
public class Bar {
}
[TestClass]
public class UnitTest1 {
[TestMethod]
public void TestMethod1() {
CallContext.LogicalSetData("foo", new Bar());
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None );
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么?!?!?
看看下面的程序.这是不言自明的,但无论如何我会解释:)
我有两种方法,一种是快速的,一种是慢速的.这些方法完全相同:它们创建一个包含50,000行和1000列的表.我写入表中的可变数量的列.在下面的代码中,我选择了10(NUM_COLS_TO_WRITE_TO).
换句话说,1000中只有10列实际上包含数据.好.在只有两种方法之间的区别在于快速填充列,然后调用DataTable.AddRow,而慢的一个做它之后.而已.
然而,性能差异令人震惊(无论如何).快速版本几乎完全不受改变我们写入的列数的影响,而慢速版本线性上升.例如,当我写入的列数为20时,快速版本需要2.8秒,但慢速版本需要一分钟.
世界上可能会发生什么?
我认为可能添加dt.BeginLoadData会有所作为,它在一定程度上确实将时间从61秒降低到约50秒,但这仍然是一个巨大的差异.
当然,显而易见的答案是,"好吧,不要这样做." 好.当然.但世界上究竟是什么导致了这一点?这是预期的行为吗?我当然没想到.:)
public class Program
{
private const int NUM_ROWS = 50000;
private const int NUM_COLS_TO_WRITE_TO = 10;
private const int NUM_COLS_TO_CREATE = 1000;
private static void AddRowFast() {
DataTable dt = new DataTable();
//add a table with 1000 columns
for (int i = 0; i < NUM_COLS_TO_CREATE; i++) {
dt.Columns.Add("x" + i, typeof(string));
}
for …Run Code Online (Sandbox Code Playgroud) 你能告诉我如何在VB6集合中编辑项目吗?前 - 我有以下收藏 -
Dim OrdLines As New Collection
OrdLines.Add (111)
OrdLines.Add (111)
OrdLines.Add (222)
OrdLines.Add (333)
OrdLines.Add (444)
Run Code Online (Sandbox Code Playgroud)
现在我的要求是编辑第3项并想要改变它让我们说"ABC"我该怎么做呢.
如何在字符串开头和点(.)符号之后将每个单词大写?
我对google和stackoverflow进行了研究,下面是我实现的代码,但这只会将字符串的开头大写。示例如下;
var str = 'this is a text. hello world!';
str = str.replace(/^(.)/g, str[0].toUpperCase());
document.write(str);Run Code Online (Sandbox Code Playgroud)
我想要的字符串是This is a text. Hello world!.
我尝试使用CSS,text-transform: capitalize;但这会导致每个单词都大写。
我有与此问题的海报相同的问题在 具有不同根相对路径的代理后面运行ASP.NET MVC应用程序
除了我在IIS 7中运行"经典"ASP.NET 4.0.基本上,应用程序部署到http:// machine/MyApp,但它通过代理服务器访问:http:// someotherMachine/SomeDirectory/MyApp的.因此,ASP.NET认为/ MyApp是根,但在这种情况下它确实不是.是否有一些我可以设置的ASP.NET或IIS的神奇设置告诉它,"嘿,顺便说一句,这个应用程序的根实际上是SomeDirectory而不是MyApp?"
如果整个String不是“ M”,“ F”或“ M / F”,则我需要一个正则表达式在Java中使用以“ UNKNOWN”替换String。换一种说法:
一种奇怪的情况是“ M /”或“ F /”,应变为“未知”。请帮助,我在这里死了。
我实际上是通过xml映射文件将正则表达式传递到框架中,因此我无法以编程方式控制输出的形成方式。我只能传递一个正则表达式,然后用正则表达式代替。
这是我的示例场景.我有一个Console应用程序和一个类库dll(称之为libraryA).LibraryA dll引用了Oracle.DataAccess.dll版本4.112.2.0.Oracle DLL位于GAC中.LibraryA中对Oracle DLL的引用是"Copy Local = false".到现在为止还挺好.如果构建了LibraryA的DLL,然后Oracle.DataAccess.dll并没有在它的输出目录显示出来.好.现在我在我的控制台应用程序中引用libraryA dll.对libraryA dll的引用是"copy local = true".现在,当我构建控制台应用程序时,Oracle.DataAcess.dll 确实显示在控制台应用程序的输出目录中.但是,似乎这种方式的唯一DLL是Oracle dll.这是LibraryA的完整代码
public void Foo() {
Oracle.DataAccess.Client.OracleConnection c = new Oracle.DataAccess.Client.OracleConnection();
WebMatrix.WebData.OAuthAccountData x = new WebMatrix.WebData.OAuthAccountData("asd", "asd");
DevExpress.Web.ASPxCallback.ASPxCallback cvv = new DevExpress.Web.ASPxCallback.ASPxCallback();
}
Run Code Online (Sandbox Code Playgroud)
WebMatrix和DevExpress也像Oracle DLL一样在GAC中.但是,这些DLL都不会输出到输出目录,只输出Oracle dll.为什么?这里发生了什么事?
就此而言,您可以创建另一个类库,将其称为libraryB,不要将libraryB放在GAC中,从LibraryA引用LibraryB并设置copy local = false.即使这样做,libraryB也不会复制到控制台应用程序的输出目录中.当然,在这种情况下,程序会爆炸,因为它找不到库B,但至少Visual Studio尊重copy local flag = false.这个愚蠢的Oracle DLL有什么不同?
哦,还有一件事很有趣.如果在我的控制台应用程序中,我显式添加了对Oracle.DataAccess.dll的引用,并说copy local = false,那么它不会显示在输出目录中.没有一个DLL出现在输出目录中似乎有点搞笑,我必须实际引用它:)
编辑:
另一个线索.为了折磨开发人员,Oracle没有为AnyCPU构建一个DLL.它们有x86和x64版本.就我而言,我正在引用x86版本并为AnyCPU构建.但是,如果我为x86构建(以匹配oracle dll),则Oracle DLL 不会复制到输出目录.在AnyCPU中构建时,MSBUILD说:"警告MSB3270:正在构建的项目的处理器体系结构"MSIL"与参考"Oracle.DataAccess,Version = 4.112.2.0,Culture = neutral,"的处理器体系结构不匹配. PublicKeyToken = …
在Visual Studio 2008中,如果您创建一个新的"Ajax 1.0启用的ASP.NET 2.0 Web应用程序"并粘贴以下代码:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button runat="server" ID="foo" Text="click me" onclick="foo_Click" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
代码背后
protected void foo_Click(object sender, EventArgs e) {
throw new Exception("hello");
}
Run Code Online (Sandbox Code Playgroud)
然后单击按钮,您将看到一个"hello"的javascript警报.如果您创建.NET 3.5 Web应用程序并粘贴相同的代码,则不再显示任何警报.我错过了什么?
当我对整个页面进行数据绑定时,我会做这样的事情:
Blah blah ......
<%# SomeProperty == "GoodBye" ? "See you later" : "Hello" %>
Run Code Online (Sandbox Code Playgroud)
这是美丽的.但是,我经常不会对整个页面使用数据绑定,而是使用"clasic"ASP.NET方式编写内容.例如,在后面的代码我会有类似的东西:
lblSomeMessage.Text = SomeProperty == "GoodBye" ? "See you later" : "Hello";
Run Code Online (Sandbox Code Playgroud)
然后.aspx会有
<asp:label runat="server" id="lblSomeMessage"/>
Run Code Online (Sandbox Code Playgroud)
但我想这样做既 ......之类的.我想做的是不使用数据绑定语法,而是使用代码块:
<%= SomeProperty == "GoodBye" ? "See you later" : "Hello" %>
^^^^
Run Code Online (Sandbox Code Playgroud)
Noe输出标签语法.现在,问题是,这个标签何时才会被评估?假设在OnPreRender事件之前我没有设置SomeProperty属性.这太晚了吗?在我的测试中我实际上是这样做的:
<%= SomeProperty == "GoodBye" ? + new System.Diagnostics.StackTrace().ToString() : "OH NO!" %>
Run Code Online (Sandbox Code Playgroud)
并根据stacktrace:
在System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer)的System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children)中的ASP.webform1_aspx .__ Renderform1(HtmlTextWriter __w,Control parameterContainer)...
它发生在渲染过程中,这是完美的.但这有保证吗?这条规则有什么问题吗?
asp.net ×2
c# ×2
performance ×2
.net ×1
asp.net-3.5 ×1
autocomplete ×1
debugging ×1
iis ×1
javascript ×1
mstest ×1
optimization ×1
proxy ×1
regex ×1
unit-testing ×1
updatepanel ×1
vb6 ×1