有没有办法将特定目录添加到Windows系统变量%PATH%?这似乎不起作用:
String[] cmd = { "cmd", "/c", "set", "PATH=\"%PATH%;c:\\test\"" };
Runtime.getRuntime().exec( cmd );
Run Code Online (Sandbox Code Playgroud)
c:\ test \没有出现在System.getenv("PATH")中; 或者在输出中
String[] cmd = { "cmd", "/c", "echo", "%PATH%" };
Runtime.getRuntime().exec( cmd );
Run Code Online (Sandbox Code Playgroud)
我需要的是修改Windows下当前Java-Process的%PATH%-variable.原因是,我需要加载一些相互交叉引用的本机dll文件.所以我想将应用程序路径添加到Windows环境中.
我试过的下一件事是用于C-Function"putenv"的小型JNI-Wrapper,它看起来像这样:
JNIEXPORT void JNICALL Java_com_splitscreen_AppletTest_PutEnv_putEnv
(JNIEnv *env, jobject jobj, jstring val) {
jboolean iscopy;
const char *mvalue = (*env)->GetStringUTFChars(
env, val, &iscopy);
putenv(mvalue);
}
Run Code Online (Sandbox Code Playgroud)
这就是我所说的:
final String curPath = System.getenv( "PATH" );
final PutEnv pe = new PutEnv();
pe.putEnv( "PATH=" + curPath + ";c:\test" );
final String newPath = System.getenv( …Run Code Online (Sandbox Code Playgroud) 在对这个答案的评论中(建议使用位移运算符而不是整数乘法/除法,为了提高性能),我询问这实际上是否会更快.在我的脑海中有一个想法,在某种程度上,某些东西将足够巧妙地解决这个问题>> 1并且/ 2是相同的操作.但是,我现在想知道这是否真的是真的,如果是,它会发生在什么级别.
测试程序optimize为两种方法产生以下比较CIL(带有on),分别对其参数进行划分和移位:
IL_0000: ldarg.0
IL_0001: ldc.i4.2
IL_0002: div
IL_0003: ret
} // end of method Program::Divider
Run Code Online (Sandbox Code Playgroud)
与
IL_0000: ldarg.0
IL_0001: ldc.i4.1
IL_0002: shr
IL_0003: ret
} // end of method Program::Shifter
Run Code Online (Sandbox Code Playgroud)
所以C#编译器正在发出div或shr指示,而不是聪明.我现在想看看JITter生成的实际x86汇编程序,但我不知道如何执行此操作.它甚至可能吗?
编辑添加
感谢您的回答,已接受来自nobugz的那个,因为它包含有关该调试器选项的关键信息.最终对我有用的是:
Tools | Options | Debugger,关闭'抑制模块负载上的JIT优化'(即我们希望允许 JIT优化)Debugger.Break()某处发表声明至少可以说结果很有启发性 - 事实证明JITter实际上可以做算术!这是来自"反汇编"窗口的已编辑样本.各种-Shifter方法除以2的幂>>; 各种-Divider …
如何在表中的DateTime字段中选择日期与另一个日期之间的记录.
我的Solr数据源是一个SQL数据库,其中主键是复合的(即它是两个字段).
这对我的主要DIH来说很好query,我只是连接字段,这就成了我的Solr主键.但是,从文档中我不清楚如何编写delta-import查询来支持这一点.
文档建议我需要两个查询 - 一个用于查找已更改行的主键,另一个用于查找与每个键对应的单个文档.但是没有示例显示复合键.
理想情况下,我根本不需要这两个单独的查询,如果将这两个查询简单地组合在一起,那么它将减少数据库上的负载,以便query和之间的唯一区别deltaQuery是WHERE基于过滤器的子句last_changed.
所以,如果我的主要query是:
SELECT key1 || key2 as pk FROM table
Run Code Online (Sandbox Code Playgroud)
相关deltaQuery(和/或deltaImportQuery)的外观是什么样的?
我尝试添加该WHERE子句,但在查询运行后,我得到了一个关于缺失的警告deltaImportQuery,然后是一个空指针异常.
当我尝试这个时:
SELECT *
-- INTO DB2.dbo.CustomerOrderLines
FROM DB1.dbo.CustomerOrderLines
INNER JOIN DB1.dbo.CustomerOrders ON DB1.dbo.CustomerOrders.Order_Display_Ref = DB1.dbo.CustomerOrderLines.Order_Display_Ref
WHERE DB1.dbo.CustomerOrders.Delivered_Date BETWEEN '2009-09-23' and '2009-09-24'
Run Code Online (Sandbox Code Playgroud)
it show the rows correctly.
When I try to copy the contents from one table in DB1 into the same table in DB2 (and create it if it does not exist):
SELECT *
INTO DB2.dbo.CustomerOrderLines
FROM DB1.dbo.CustomerOrderLines
INNER JOIN DB1.dbo.CustomerOrders ON DB1.dbo.CustomerOrders.Order_Display_Ref = DB1.dbo.CustomerOrderLines.Order_Display_Ref
WHERE DB1.dbo.CustomerOrders.Delivered_Date BETWEEN '2009-09-23' and '2009-09-24'
Run Code Online (Sandbox Code Playgroud)
it fails with
Msg 2705, Level 16, State 3, …
当使用C++向量时,花费的时间是718毫秒,而当我使用Array时,时间几乎是0毫秒.
为什么这么大的性能差异?
int _tmain(int argc, _TCHAR* argv[])
{
const int size = 10000;
clock_t start, end;
start = clock();
vector<int> v(size*size);
for(int i = 0; i < size; i++)
{
for(int j = 0; j < size; j++)
{
v[i*size+j] = 1;
}
}
end = clock();
cout<< (end - start)
<<" milliseconds."<<endl; // 718 milliseconds
int f = 0;
start = clock();
int arr[size*size];
for(int i = 0; i < size; i++)
{
for(int j = 0; j < …Run Code Online (Sandbox Code Playgroud) 我有一些需要调用Java的本机线程.为此,我需要使用线程将线程附加到VM AttachCurrentThread.由于此回调将经常发生,因此线程应该保持连接.AttachCurrentThread多次调用很好("尝试附加已经附加的线程是无操作的.")
DetachCurrentThread在线程退出之前我是否必须调用,是否会自动发生,或者甚至不需要?如果我必须打电话给分离会怎么样,但不是吗?它只是"泄漏",还是会破坏虚拟机状态?
我已经检查了Java Native Interface规范,但要么错过了这个,要么就是未指定.
我的问题特别适用于Windows XP上的Sun JDK 6.
我创建了一个功能,需要两个文件夹才能正常工作.这些文件夹在rails项目中不存在,所以我不得不创建它们.现在我需要推送这个功能,以便其他开发人员也可以使用它.
您认为最佳做法是什么?
在本地创建文件夹并在某处留言,说明需要创建这些文件夹
创建将创建这些文件夹的迁移
如果文件夹在执行时不存在,请创建它们
那么关于这个的最佳实践是什么?
我试图修改App.cs并从代码后面加载WPF XAML文件,但它不能正常工作.
无论我试图将其设置为StartupUri,它都不会启动,程序将在此之后退出.
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
LoginDialog dlg = new LoginDialog();
if (dlg.ShowDialog() != true)
return;
switch (dlg.ChoiceApp) {
case ChoiceApp.CustomerEntry:
StartupUri = new Uri("/MyApp;component/Forms/CustomerEntry.xaml",
UriKind.Relative);
break;
case ChoiceApp.VendorEntry:
StartupUri = new Uri("/MyApp;component/Forms/VendorEntry.xaml",
UriKind.Relative);
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我甚至做了跟踪并发现LoginDialog工作正常并正确返回值,但设置"StartupUri"不起作用.
我在反向程序集中检查了在OnStartup之后调用App的DoStartup方法,所以从技术上讲,我的StartupUri必须加载,但它没有,在App.xaml启动uri根本没有定义.
注意:Bug已确认
我注意到ShowDialog设置了Application.MainWindow,当对话结束时,它将其设置为null,并且由于此设置,在OnStartup或Startup事件中调用Modal Dialog后,StartupUri不起作用.
关于无效的uri或类似的东西没有错误或例外.
这个方法在没有在Startup事件或OnStartup中调用DialogBox的情况下工作,我认为在这个方法上调用showdialog会导致它的主窗口设置为过期窗口,并在此之后关闭.
使用jQuery,如何检查表格单元格是否为空?
请帮我.