有一段时间,我一直在多线程环境中使用HttpClient.对于每个线程,当它启动连接时,它将创建一个全新的HttpClient实例.
最近,我发现,通过使用这种方法,它可能导致用户打开太多端口,并且大多数连接处于TIME_WAIT状态.
http://www.opensubscriber.com/message/commons-httpclient-dev@jakarta.apache.org/86045.html
因此,而不是每个线程做:
HttpClient c = new HttpClient();
try {
c.executeMethod(method);
}
catch(...) {
}
finally {
method.releaseConnection();
}
Run Code Online (Sandbox Code Playgroud)
我们计划:
[方法A]
// global_c is initialized once through
// HttpClient global_c = new HttpClient(new MultiThreadedHttpConnectionManager());
try {
global_c.executeMethod(method);
}
catch(...) {
}
finally {
method.releaseConnection();
}
Run Code Online (Sandbox Code Playgroud)
在正常情况下,global_c将同时由50个++线程访问.我想知道,这会产生任何性能问题吗?MultiThreadedHttpConnectionManager是否使用无锁机制来实现其线程安全策略?
如果10个线程正在使用global_c,那么其他40个线程是否会被锁定?
或者,如果在每个线程中我创建一个HttpClient实例,但是显式释放连接管理器会更好吗?
[方法B]
MultiThreadedHttpConnectionManager connman = new MultiThreadedHttpConnectionManager();
HttpClient c = new HttpClient(connman);
try {
c.executeMethod(method);
}
catch(...) {
}
finally {
method.releaseConnection();
connman.shutdown();
}
Run Code Online (Sandbox Code Playgroud)
connman.shutdown()会遇到性能问题吗?
对于使用50 ++线程的应用程序,我可以知道哪种方法(A或B)更好吗?
如何使用编程方式创建JAR文件java.util.jar.JarOutputStream?我的程序生成的JAR文件看起来是正确的(它提取正常)但是当我尝试从中加载库时,Java抱怨它无法找到明确存储在其中的文件.如果我提取JAR文件并使用Sun的jar命令行工具重新压缩它,则生成的库可以正常工作.简而言之,我的JAR文件有问题.
请解释如何以编程方式创建JAR文件,并使用清单文件.
我搜索过但看不到类似的问题.
我已经添加了一种方法来检查每个Reachability示例的互联网连接.它大部分时间都可以工作,但是当安装在iPhone上时,即使我有互联网连接也经常会失败(只有在3G/EDGE上才能使用 - WiFi可以).
基本上下面的代码返回NO.
如果我切换到另一个应用程序,例如Mail或Safari,然后连接,然后切换回应用程序,然后代码显示可以访问互联网.有点似乎需要'轻推'.
有人见过这个吗?有任何想法吗?
非常感谢詹姆斯
+ (BOOL) doWeHaveInternetConnection{
BOOL success;
// google should always be up right?!
const char *host_name = [@"google.com" cStringUsingEncoding:NSASCIIStringEncoding];
SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL,
host_name);
SCNetworkReachabilityFlags flags;
success = SCNetworkReachabilityGetFlags(reachability, &flags);
BOOL isAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
if (isAvailable) {
NSLog(@"Google is reachable: %d", flags);
}else{
NSLog(@"Google is unreachable");
}
return isAvailable;
Run Code Online (Sandbox Code Playgroud)
}
在下面的代码中,我按照预期在100秒后捕获TimeoutException.此时我希望代码退出main并终止程序,但它会继续打印到控制台.如何让任务在超时后停止执行?
private static final ExecutorService THREAD_POOL = Executors.newCachedThreadPool();
private static <T> T timedCall(Callable<T> c, long timeout, TimeUnit timeUnit) throws InterruptedException, ExecutionException, TimeoutException {
FutureTask<T> task = new FutureTask<T>(c);
THREAD_POOL.execute(task);
return task.get(timeout, timeUnit);
}
public static void main(String[] args) {
try {
int returnCode = timedCall(new Callable<Integer>() {
public Integer call() throws Exception {
for (int i=0; i < 1000000; i++) {
System.out.println(new java.util.Date());
Thread.sleep(1000);
}
return 0;
}
}, 100, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
return;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个iPhone应用程序,到目前为止一切正常.我可以在模拟器中构建和启动应用程序.但是,当我现在用仪器启动应用程序时,我得到了错误:
Dyld Error Message:
Symbol not found: _CFXMLNodeGetInfoPtr
Referenced from: /System/Library/Frameworks/Security.framework/Versions/A/Security
Expected in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索,但没有找到解决方案.
希望有人可以帮助我.谢谢
有没有办法记录并以编程方式遍历其所有字段而不明确地执行"Record.somefield"?
我想要做的是将记录保存/加载为INI文件的通用函数,这样我就可以在记录结构中添加或删除字段,而不必在每次删除或添加字段到记录时重写保存/加载函数.
换句话说,我想以某种方式迭代(伪代码):
THuman = record
age: integer;
country: string ;
end;
...
myPerson: THuman;
...
foreach Field in myPerson do
begin
if Field.value is String then ini.WriteString( 'Group', Field.Name, Field.value );
if Field.value is integer then ini.WriteInteger( 'Group', Field.Name, Field.value );
end;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我想这样做的原因是因为我在使用非有界字符串时无法保存类型字段.对我来说,文件是人类可读的也是有益的.所以我正在保存它们和INI文件.
我使用basicHttpBinding在IIS中托管WCF服务.WCF Web服务使用ADO.Net查询后端SQL Server 2008,并将DataTable返回到WCF服务的客户端.
我发现当返回的DataTable很大时,会有异常表示http连接被IIS关闭.任何想法有什么不对,以及如何设置更大的响应大小?另一个想法是对象的序列化大小是否有任何硬性限制(我想可能DataTable实例太大而不能序列化?)
IIS返回的错误信息是:
异常消息:
收到http://labmachine1/service.svc的HTTP响应时发生错误 .这可能是由于服务端点绑定不使用HTTP协议.这也可能是由于服务器中止HTTP请求上下文(可能是由于服务关闭).请参阅服务器日志以获取更多详
{"底层连接已关闭:接收时发生意外错误."}
这是我的服务器端的完整源代码,对于我在web.config中托管的服务器,默认值没有变化.由于我在IIS中托管,我使用basicHttpBinding.
public class StudentManagement : IStudentManagement
{
public DataTable Poll(int Id)
{
return MakeParentTable();
}
private DataTable MakeParentTable()
{
// Create a new DataTable.
System.Data.DataTable table = new DataTable("ParentTable");
// Declare variables for DataColumn and DataRow objects.
DataColumn column;
DataRow row;
// Create new DataColumn, set DataType,
// ColumnName and add to DataTable.
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "id";
column.ReadOnly = true;
column.Unique = …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种算法,它可以解决下面描述的问题.我已经编写了一个算法(我认为它过于专业化,无法发布),尽可能地优化,但在更大的数字集上它仍然太慢(因为成本呈指数增长).在合适的计算机上,解决方案应该不超过5秒.
你给了一组数字,例如:
M = {1,1,1,2,2,2,5,5,5,10,10,10,10,20,50,50,50,......,10000,10000,20000,20000}
不必有特殊的结构(虽然他们在这里).
您将获得一组"目标点",也包括数字,例如:
P = {670,2010,5600,10510,15000}
目标是,从M中取出最少数量的数字,其中,当您按照确定的顺序添加它们时,您获得尽可能接近 P中所有点的中间结果.您只能使用M中的每个数字一旦.
在我们的例子中,一个可能的解决方案是(虽然我不知道它是否是最好的):
Y =(500,100,50 ; 1000,200,200; 2000,1000,500; 5000; 2000,2000)
正如您所看到的那样,这两个标准的最小和最接近的某种权衡.这就是为什么我当前的算法使用评分来找到"最佳"解决方案.
以下是它目前的工作原理:
它从不尝试两个相同的数字,只尝试升序,例如:
每个数字大约有5个,并删除了许多较小的数字,算法非常快,并找到了一个很好的解决方案.但是当我添加更多数字或特别包含更小的数字时,运行时间从100ms增加到无穷大.
你能给我一个提示,如何处理这个问题?文献中是否有类似的算法可以处理问题或其中的一部分?
这是情况......
我有一个计划运行的cron作业,用于备份我的数据库.由于php的安装方式,我不得不使用lynx来执行正在执行备份的php脚本.
因为这个脚本必须存在于我的public_html文件夹中,所以我想拒绝所有请求,除了直接来自我的服务器的请求(即:localhost).另外,我假设我将来自的ip是127.0.0.1.我不确定这是否属实,但我想不出在这种情况下我的ip会是什么.我是否正确运行cron作业并从127.0.0.1命中脚本?
这是我的.htaccess的样子:
order allow,deny
deny from all
allow from 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
结果,我不断获得403 Forbidden.除了我自己,这是我想要为其他所有人做的事情.也许我会以错误的方式解决这个问题......有谁看到我做错了什么?
鉴于Jeff Atwoods断言所有编程都是Web编程,并且在家用机器上使用动态DNS在OSX上新设置了Apache,StackOverflow社区将建议什么作为基于此的有趣编程项目,以及使用什么技术?
java ×3
iphone ×2
.htaccess ×1
.net ×1
algorithm ×1
apache ×1
c# ×1
delphi ×1
distribution ×1
futuretask ×1
iis ×1
instruments ×1
jar ×1
localhost ×1
macos ×1
numbers ×1
objective-c ×1
wcf ×1