小编ata*_*ata的帖子

程序如何删除自己的可执行文件

有没有办法让正在运行的进程可以删除自己的可执行文件?

例如,我创建一个控制台应用程序(单个exe),并在执行某些任务后以某种方式删除exe文件.

我必须向某人发送一个文件.我希望它在完成预定任务后删除.

无论如何都要在Windows中执行此操作

windows file process

29
推荐指数
4
解决办法
3万
查看次数

从字符串中删除字符的最快方法

我有一个字符串,我必须从中删除以下字符:'\ r','\n'和'\ t'.我尝试了三种不同的方法来删除这些字符并对它们进行基准测试,以便我可以获得最快的解决方案.

以下是我运行1000000次的方法和执行时间:

如果我要删除1或2个字符,它应该是最快的解决方案.但随着我投入更多的焦炭,它开始需要更多的时间

str = str.Replace("\r", string.Empty).Replace("\n", string.Empty).Replace("\t", string.Empty);
Run Code Online (Sandbox Code Playgroud)

执行时间= 1695

对于1或2个char,这比String.Replace慢,但是对于3个char它表现出更好的性能.

string[] split = str.Split(new char[] { '\t', '\r', '\n' }, StringSplitOptions.None);
str = split.Aggregate<string>((str1, str2) => str1 + str2);
Run Code Online (Sandbox Code Playgroud)

执行时间= 1030

最慢的,即使是1个字符.也许我的正则表达不是最好的.

str = Regex.Replace(str, "[\r\n\t]", string.Empty, RegexOptions.Compiled);
Run Code Online (Sandbox Code Playgroud)

执行时间= 3500

这些是我提出的三种解决方案.有没有更好更快的解决方案,这里的任何人都知道,或者我可以在此代码中做任何改进?

我用于基准测试的字符串:

StringBuilder builder = new StringBuilder();
        builder.AppendFormat("{0}\r\n{1}\t\t\t\r\n{2}\t\r\n{3}\r\n{4}\t\t\r\n{5}\r\n{6}\r\n{7}\r\n{8}\r\n{9}",
         "SELECT ",
         "[Extent1].[CustomerID] AS [CustomerID], ",
         "[Extent1].[NameStyle] AS [NameStyle], ",
         "[Extent1].[Title] AS [Title], ",
           "[Extent1].[FirstName] AS [FirstName], ",
           "[Extent1].[MiddleName] AS [MiddleName], ",
           "[Extent1].[LastName] AS [LastName], ", …
Run Code Online (Sandbox Code Playgroud)

.net c# string

21
推荐指数
3
解决办法
7928
查看次数

在AppDomains之间共享数据

我有一个可以有多个AppDomain的进程.每个AppDomain都会收集一些统计信息.在指定的时间之后,我想累积这些统计信息并将它们保存到文件中.

一种方法是远程处理,我想避免.

我想到的唯一其他技术是将每个AppDomain的数据保存在一个文件中,并在一段特定时间后,其中一个AppDomain收集所有数据并累积它们.

但如果所有这些都可以在内存中完成,那么这将是理想的,而无需在AppDomains之间序列化信息的成本.有人有主意吗?

c# appdomain

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

在NetBeans中禁用自动构建

我正在使用Netbeans IDE 6.7.1,我希望禁用自动构建功能.或以某种方式更改此自动构建线程的优先级.它总是在建设,并且减慢了我的电脑速度.我想因为这个原因,Netbeans有时会占用我CPU的80%左右.我真的不想要这个功能,我可以在需要时进行构建.

ide netbeans

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

什么是流行的,多平台,免费和开源的套接字库

是否有任何免费的开源库(在C/C++中)广泛使用的套接字,并支持广泛的操作系统(Windows,Unix/Linux,FreeBSD等).就像pthreads一样.

否则,剩下的唯一解决方案是为每个操作系统编写套接字包装器.或者写一个针对winsock和GNU C sys/socket.h库的包装就足够了?

我是否有可能针对GNU C提供的套接字库实现它.GNU C可用于各种平台,我的代码可以在所有这些平台上运行吗?

c c++ sockets

8
推荐指数
3
解决办法
9319
查看次数

使用JNI从C调用Java代码时内存泄漏

我有一个C程序,使用JNI在Java商店中存储一些对象.(在有人问之前,使用java商店是一个需求,我必须在C中编写一个能够从该商店添加和检索对象的客户端).

我制作了程序并尝试添加100000大小为1KB的对象.但是在添加了50000个对象后,我收到了"内存不足"的消息(请注意,每当我无法使用NewStringUTF和NewByteArray函数分配新的字符串或字节数组时,我就会打印这些"内存不足"消息).那时我的应用程序只使用80MB的内存.我不知道为什么这些方法返回NULL.有什么我想念的东西.

此外,即使我发布为java创建的字节数组和字符串,内存也在不断增加.

这是源代码.

    void create_jvm(void)
{
    JavaVMInitArgs vm_args;     
    JavaVMOption vm_options;

    vm_options.optionString = "-Djava.class.path=c:\\Store";
    vm_args.version = JNI_VERSION_1_4;
    vm_args.nOptions = 1;
    vm_args.options = &vm_options;
    vm_args.ignoreUnrecognized = 0;

    JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

    if(env != null)
    {
        j_store = (*env)->FindClass(env, "com/store");
        if(j_store == null)
        {
            printf("unable to find class. class name: JStore");
        }       
    }   
}

void add(char* key, char* value, int length)
{
    jstring j_key = (*env)->NewStringUTF(env, key);
    jbyteArray j_value = (*env)->NewByteArray(env, length);

    (*env)->SetByteArrayRegion(env, j_value, 0, length, (jbyte *)value);
    ret = (*env)->CallStaticBooleanMethod(env, j_store, method_id, …
Run Code Online (Sandbox Code Playgroud)

c java java-native-interface memory-leaks

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

从Java存储中检索未知长度的字节数组

我已经发布了一个关于它的问题,但那时我还没有账号.我得到了答复,但我仍然感到困惑,我不能继续这个帖子.

我将再次发布问题以及之前对话的链接.

将char数组从java返回到字符串 - JNI

我用Java存储的数据是序列化的.我使用下面的代码进行java函数调用.

下面的代码假定C的char与Java的字节兼容,因为Java的char是2字节而C的char是1字节.jbyte也是一个签名的字符*

    //value will be the serialized data
void store(char* key, char* value, int val_len)
Run Code Online (Sandbox Code Playgroud)

{

    //consider the jclass and methodid are already initialized

    jstring j_key = (*env)->NewStringUTF(env, key);
    jbyteArray j_value = (*env)->NewByteArray(env, val_len);

    (*env)->SetByteArrayRegion(env, j_value, 0, val_len, (jbyte *)value);

    //The store method on java side will save the value (as is) in memory
    (*env)->CallStaticVoidMethod(j_class, store_method, key, value);

    (*env)->ReleaseByteArrayElements(env, j_value, (jbyte *)value, JNI_ABORT);
    (*env)->ReleaseStringUTFChars(env, j_key, key);
Run Code Online (Sandbox Code Playgroud)

}

保存数据后,我使用另一个函数从商店检索数据.那时我不知道我要检索的数据大小.我的API在C中,存储在Java中.我将使用我的C函数与Java交互.并且可以有多个线程同时从Java存储中检索数据.

我正在从C调用Java到Java,我的控件应在检索数据后返回C程序.我对代码如何工作有点困惑.我将如何获取指向数组的指针(从java检索),然后使用GetByteArrayElements检索它.记得我不知道我要在手边检索的数据大小,因此不能使用NewByteArray函数创建一个字节数组,然后用java代码中的数据填充它.

c java java-native-interface

5
推荐指数
1
解决办法
4196
查看次数

/* 来自 CLR*/ 在 Java TreeMap 实现中

我正在查看 Java (JDK 1.6_45) TreeMap 代码以了解我遇到的问题,并且在一些方法中我看到一条评论说 /** From CLR */。

我的印象是 CLR 是 Microsoft 的通用运行时术语。CLR 术语是否也用于 Java?如果没有,那么是否有一个共同的协议来使用彼此的实现(当然在转换之后)还是只是一些自动生成的评论?

例子

/** From CLR */
    private void fixAfterInsertion(Entry<K,V> x) {
Run Code Online (Sandbox Code Playgroud)

java clr

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

Path.toFile() 和 new File(pathString) 的不同行为

我在 Windows 中安装了网络驱动器(samba 服务器)。

我在该驱动器中有一个文件,我想在 Java 程序中读取该文件。

在我尝试使用以下方法读取文件之前:

Paths.get(basePath, fileName).toFile()
Run Code Online (Sandbox Code Playgroud)

但由于文件不存在而失败。文件就在那里,路径也很好。

然后我尝试了以下有效的代码:

String path = Paths.get(basePath, fileName).toAbsolutePath().toString()
File file = new File(path)
Run Code Online (Sandbox Code Playgroud)

两种方法有什么区别吗?是否需要任何安全设置?

更新

因此,在我使用第二部分(有效的部分)之后,我回到原来的部分(原样)来验证调试,这次它有效了。我用同一目录中的另一个文件尝试了它,但失败了。看起来很奇怪,但我会检查更多。

java file network-drive java-io java.nio.file

5
推荐指数
1
解决办法
1731
查看次数

使用java流更新字符串数组

我知道对于object,我们可以为每个集合和更新对象,但对于像Strings这样的不可变对象,我们如何用新对象更新数组而不将其再次转换为数组.

例如,我有一个字符串数组.我想迭代每个字符串并修剪它们.否则我不得不这样做:

Arrays.stream(str).map(c -> c.trim()).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

最后,我会得到一个List而不是我最初给出的String [].它经过了大量的处理.有什么方法可以做类似的事情:

for(int i = 0; i < str.length; i++) {
        str[i] = str[i].trim();
    }
Run Code Online (Sandbox Code Playgroud)

使用java流?

arrays string java-8 java-stream

4
推荐指数
2
解决办法
448
查看次数