我正在使用开源库连接到我的网络服务器.我担心网络服务器的速度非常慢,然后我尝试用Ruby做一个简单的测试,我得到了这些结果
Ruby程序:10个HTTP GET的2.11秒
Ruby程序:100个HTTP GET的18.13秒
C#库:10个HTTP GET的20.81秒
C#库:100个HTTP GET的36847.46seconds
我已经分析并发现问题是这个功能:
private HttpWebResponse GetRawResponse(HttpWebRequest request) {
HttpWebResponse raw = null;
try {
raw = (HttpWebResponse)request.GetResponse(); //This line!
}
catch (WebException ex) {
if (ex.Response is HttpWebResponse) {
raw = ex.Response as HttpWebResponse;
}
}
return raw;
}
Run Code Online (Sandbox Code Playgroud)
标记的行自己完成需要1秒以上,而执行1请求的ruby程序需要0.3秒.我也在127.0.0.1上进行所有这些测试,因此网络带宽不是问题.
什么可能导致这个巨大的减速?
UPDATE
查看更改的基准测试结果.我实际测试了10 GET而不是100,我更新了结果.
我查看和搜索,找不到我需要的东西虽然我认为它应该很简单(如果你有任何Python经验,我不这样做).
给定一个字符串,我想在Python中验证它只包含字母数字字符:a-zA-Z0-9和. _ -
例子:
公认:
bill-gates
Steve_Jobs
Micro.soft
被拒绝:
Bill gates - 不允许空格
me@host.com - @不是字母数字
我正在尝试使用:
if re.match("^[a-zA-Z0-9_.-]+$", username) == True:
但这似乎没有做到......
我一直在观察,即使进程仍在运行,Process.HasExited有时也会返回true.
我的代码在下面启动一个名为"testprogram.exe"的进程,然后等待它退出.问题是有时我会抛出异常; 似乎即使HasExited返回true过程本身在系统中仍然存在 - 这怎么可能?
我的程序在它终止之前写入日志文件,因此我需要在读取之前绝对确定该日志文件存在(也就是进程已终止/完成).不断检查它的存在不是一种选择.
// Create new process object
process = new Process();
// Setup event handlers
process.EnableRaisingEvents = true;
process.OutputDataReceived += OutputDataReceivedEvent;
process.ErrorDataReceived += ErrorDataReceivedEvent;
process.Exited += ProgramExitedEvent;
// Setup start info
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = ExePath,
// Must be false to redirect IO
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
Arguments = arguments
};
process.StartInfo = psi;
// Start the program
process.Start(); …Run Code Online (Sandbox Code Playgroud) 我在Python中有以下列表:
[[1, 2], [3, 4], [4, 6], [2, 7], [3, 9]]
Run Code Online (Sandbox Code Playgroud)
我想将它们分组 [[1,2,7],[3,4,6,9]]
我这样做的代码如下所示:
l=[[1, 2], [3, 4], [4, 6], [2, 7], [3, 9]]
lf=[]
for li in l:
for lfi in lf:
if lfi.intersection(set(li)):
lfi=lfi.union(set(li))
break
else:
lf.append(set(li))
Run Code Online (Sandbox Code Playgroud)
如果是我的最终名单.我在l和lf上做了一个循环,当我找到l和lf中的另一个元素之间的交集时,我想合并它们(union)
但我无法弄清楚为什么这不起作用.列表l的第一个元素正在使用append命令插入,但联合不起作用.我的最终名单看起来像[set([1, 2]), set([3, 4])]
它似乎是非常基本的东西,但我不熟悉套装.我感谢任何帮助
谢谢
我公司的专有软件生成一个日志文件,如果解析它会更容易使用.我们都使用的日志解析器是由另一个员工编写的一个副项目,它的性能很糟糕.
这些日志文件可以非常快速地增长到10兆字节,如果日志文件大于1兆字节,我们当前使用的解析器会出现问题.
所以,我想编写一个程序,可以在尽可能短的时间内解析大量的文本.我们专门使用Windows,因此必须在Windows上运行.我们当前的实现在本地Web服务器上运行,我确信将其作为应用程序运行必须更快.
所有建议都会有所帮助.谢谢.
编辑:我的最终目标是解析文本并以更加用户友好的方式用颜色等显示它.你能用Perl和Python做到这一点吗?我知道你可以用Java和C++做到这一点.因此,它将像记事本一样打开日志文件,但在屏幕上显示用户友好的格式而不是原始文件.
编辑:所以,我不能选择最好的答案,那就是选择一种能够最好地展示我的目标的语言,然后在其中编写解析器.此外,使用ANTLR可能会使此过程更容易.我改变了原来的问题,因为我想我没有问我到底在想什么.感谢大家!
我正在尝试让Boost库在Eclipse中的C++项目中运行.我可以在Boost中使用仅包含头的库时成功构建,例如使用lambda头的"入门"指南中的示例简单程序.
我无法让我的项目成功链接到正则表达式Boost库,如本指南后面所示.在我的项目属性 - > c/c ++ build - >设置 - >工具设置选项卡 - >库中,我已将"libboost_regex"添加到"库"框中,并添加了"C:\ Program Files\boost\boost_1_42_0\bin.v2\libs "到库搜索路径框,因为这是所有.lib文件所在的位置.我甚至尝试将"libboost_regex-mgw34-mt-d-1_42.lib"添加到库框而不是"libboost_regex",因为这是确切的文件名,但这也不起作用.
当我尝试构建项目时,我不断收到"无法找到-llibboost_regex"的错误.关于如何解决这个问题的任何想法?
编辑:在Windows XP上,使用mingw,我也试过"boost_regex"..
我需要最小化Apache HTTP响应头,现在我将它们减少如下
HTTP/1.1 200 OK
Date: Thu, 25 Mar 2010 21:57:41 GMT
Server: Apache
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以禁用日期和服务器标头,仅适用于某个虚拟主机.
谢谢!
这有望成为一个垒球语法问题:我需要调用一个带有空Object数组的方法进行评估并设置初始状态.在C#中我会这样做:
func(new Object[]{});
Run Code Online (Sandbox Code Playgroud)
在VB.NET中,我被迫这样做:
Dim ctrls() As Control = {}
func(ctrls)
Run Code Online (Sandbox Code Playgroud)
有没有办法在VB.NET中简化调用,并在一行代码中发生所有事情?
我知道有很多API可以做到这一点,但我也知道托管环境(是ASP.NET)会限制你在一个单独的线程中可靠地做的事情.
我可能完全错了,所以如果我是,请纠正我,但这是我认为我知道的.
如果你必须创建一个简单可靠的理论编程模型,并且理论上需要运行一个长时间的任务,那么你将如何在ASP.NET应用程序中实现这一目标?
以下是我对这个问题的看法:
我一直在考虑在win32服务中托管WCF服务.并通过WCF与服务部门交谈.然而,这不是很实用,因为我选择这样做的唯一原因是从几个不同的网络应用程序发送任务(工作单元).然后我最终会询问服务状态更新并采取相应措施.我最担心的是,如果我必须将每个任务部署到服务中以便能够执行某些指令,那么这将不是特别好的体验.还有这个输入问题,如果我有一个大型数据集需要通过它来咀嚼它,我将如何用数据提供这个服务?
我现在通常做的就是这个
SELECT TOP 10 *
FROM WorkItem WITH (ROWLOCK, UPDLOCK, READPAST)
WHERE WorkCompleted IS NULL
Run Code Online (Sandbox Code Playgroud)
它允许我使用SQL Server数据库作为工作队列,并使用此查询定期轮询数据库以进行工作.如果工作项目成功完成,我将其标记为已完成并继续,直到没有其他任何操作.我不喜欢的是理论上我可以在任何时候中断,如果我在中间成功并将其标记为已完成,我可能最终会处理相同的工作项两次.我可能有点偏执,这可能都很好,但据我所知,并不能保证不会发生这种情况......
我知道之前有类似的问题,但是非确切的回答是肯定的答案.这是一个非常常见的事情,但ASP.NET托管环境无法处理长时间运行的工作.
请分享你的想法.
我正在尝试做类似于stackoverflow发布的事情.我想要做的是从SD卡读取活动或服务的定义.为了避免明显的权限问题,我在.apk中创建了此活动的shell版本,但尝试将其替换为运行时驻留在SD卡上的同名活动.不幸的是,我能够使用DexClassLoader从SD卡加载活动类定义,但原始的类定义是执行的定义.有没有办法指定新的类定义替换旧的类定义,或者有关避免清单权限问题的任何建议,而不实际提供包中所需的活动?代码示例:
ClassLoader cl = new DexClassLoader("/sdcard/mypath/My.apk",
getFilesDir().getAbsolutePath(),
null,
MainActivity.class.getClassLoader());
try {
Class<?> c = cl.loadClass("com.android.my.path.to.a.loaded.activity");
Intent i = new Intent(getBaseContext(), c);
startActivity(i);
}
catch (Exception e) {
Run Code Online (Sandbox Code Playgroud)
启动com.android.my.path.to.a.loaded.activity指定的Intead /sdcard/mypath/My.apk,它启动静态加载到项目中的活动.