小编MCS*_*MCS的帖子

在java中重写Perl和shell脚本是否有意义?

我有一堆脚本 - 一些在perl中,一些在bash中 - 用于:

  • 创建数据库(表,索引,约束,视图)
  • 解析电子表格并将数据加载到数据库中
  • 获取有关一堆文件的信息并将其加载到
    数据库中.

这些脚本与一个用java编写的更大的应用程序一起使用,我的经理要求我用java重写脚本.他的理由是,如果全部使用一种语言,则更容易使用,移植,管理,理解和支持,并且太多单独的部分是设计问题.

我最初的反应是,这是一个坏主意.脚本非常简洁快速,脚本中的任务很简单 - 例如使用正则表达式来查找和替换无效值 - 在java中完成时会更加冗长和极慢.

脚本的一个缺点是,当它们在Windows上运行时,它们需要cygwin才能运行.因此,我想提出一个反建议,即将所有bash脚本移植到perl,以便它们可以在没有cygwin的情况下在Windows上运行,并且我花时间组织和记录脚本.

问题是,"直觉反应"类型的反应不足以说服我的经理.我来自Linux背景,他来自Windows,我们在方法上有一些经典的linux与windows的差异.

所以我有两个问题:

  1. 我的"直觉反应"是否正确?对于数据库管理,电子表格解析和文件处理任务,Java是否更慢,更冗长,更难维护?
  2. 如果第一个问题的答案是肯定的,那么提出我案件的最佳方式是什么?

编辑:感谢大家的见解.我想澄清一下:脚本不是隐藏在混淆脚本中的完整应用程序.在大多数情况下,它们是手动完成的任务,我通过脚本自动完成,随后根据需求进行修饰.我使用的脚本语言,而不是Java的下手的原因是因为这些任务是如此容易得多脚本来执行.例如,一个脚本运行一堆查询,格式化结果,并将它们输出到文件.您认为在java中需要多少LOC才能做到这一点?

java shell perl

16
推荐指数
8
解决办法
3690
查看次数

为什么重用DataContext会对性能产生负面影响?

经过一个公平 研究和一些错误,我修改了代码,以便它创建了一个新的DataContext每个查询数据库或数据被插入的时间.并且经常查询数据库 - 对于处理的250k个事务中的每一个,在插入事务之前查询数据库以获取客户ID,部门ID和类别.

所以现在我正在尝试优化代码,因为它每秒只处理大约15个事务.我删除了一些无关的查询并添加了一些索引,并将其提高到30 /秒.然后我想,尽管每个人都说DataContext是轻量级的,但是每个事务需要花费4倍的时间来创建一个新的,所以我尝试重用DataContext.我发现,令我惊讶的是,重复使用上下文会导致性能降低到每秒10个事务!

为什么会这样呢?是因为DataContext将实体缓存在内存中,并在查询数据库之前首先搜索其内存列表?因此,例如,如果我正在寻找名为"MCS"的客户的客户ID(主键),并且客户名称列上有聚簇索引,以便数据库查询速度快,则内存中查找会慢吗?

创建/部署如此多的数据库连接是否会降低速度,或者这只是另一种过早的优化?如果确实如此,是否有办法重用DataContext但是它为每个linq-to-sql查询执行实际的数据库查询?

c# sql-server datacontext optimization linq-to-sql

14
推荐指数
1
解决办法
3657
查看次数

使用gawk解析CSV文件

你如何使用gawk解析CSV文件?简单设置FS=","是不够的,因为带有逗号的引用字段将被视为多个字段.

使用的示例FS=","不起作用:

文件内容:

one,two,"three, four",five
"six, seven",eight,"nine"
Run Code Online (Sandbox Code Playgroud)

gawk脚本:

BEGIN { FS="," }
{
  for (i=1; i<=NF; i++) printf "field #%d: %s\n", i, $(i)
  printf "---------------------------\n"
}
Run Code Online (Sandbox Code Playgroud)

输出不好:

field #1: one
field #2: two
field #3: "three
field #4:  four"
field #5: five
---------------------------
field #1: "six
field #2:  seven"
field #3: eight
field #4: "nine"
---------------------------
Run Code Online (Sandbox Code Playgroud)

期望的输出:

field #1: one
field #2: two
field #3: "three, four"
field #4: five
---------------------------
field #1: "six, seven"
field …
Run Code Online (Sandbox Code Playgroud)

csv bash awk gawk

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

在Perl中解析Excel文件的最佳方法是什么?

在Perl中解析Excel文件最简单的方法是什么?将其转换为文本文件也可以.

excel perl parsing

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

Visual Studio Web部署到IIS 6

有没有人成功使用VS2010的新Web部署功能将网站部署到运行在Windows Server 2003上的IIS 6?

当我尝试时,我收到以下错误:

Web部署任务失败.无法完成对远程代理URL'https:// myserver:8172/msdeploy.axd?site = mysite'的请求.无法连接到远程服务器.无法建立连接,因为目标计算机主动拒绝它.

我可以在本地部署(从安装在服务器上的VS到服务器上的IIS),并且World Wide Web Publishing服务正在运行.但是,没有进程侦听端口8172.是否应该有一个进程?

iis iis-6 visual-studio-2010 windows-server-2003 webdeploy

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

正则表达式:将驼峰案例转换为带下划线的所有大写字母

可以使用什么正则表达式进行以下转换?

City -> CITY
FirstName -> FIRST_NAME
DOB -> DOB
PATId -> PAT_ID
RoomNO -> ROOM_NO
Run Code Online (Sandbox Code Playgroud)

以下几乎可以工作 - 它只是在单词的开头添加了一个额外的下划线:

var rgx = @"(?x)( [A-Z][a-z,0-9]+ | [A-Z]+(?![a-z]) )";

var tests = new string[] { "City",
                           "FirstName",
                           "DOB",
                           "PATId",
                           "RoomNO"};

foreach (var test in tests)
    Console.WriteLine("{0} -> {1}", test, 
                       Regex.Replace(test, rgx, "_$0").ToUpper());


// output:
// City -> _CITY
// FirstName -> _FIRST_NAME
// DOB -> _DOB
// PATId -> _PAT_ID
// RoomNO -> _ROOM_NO
Run Code Online (Sandbox Code Playgroud)

c# regex

12
推荐指数
2
解决办法
7813
查看次数

在JSP EL中使用正则表达式

在jsp页面中使用的EL表达式中,字符串是字面意思的.例如,在以下代码段中

<c:when test="${myvar == 'prefix.*'}">
Run Code Online (Sandbox Code Playgroud)

如果myvar的值为'prefixxxxx',则test不会计算为true.有没有人知道是否有办法将字符串解释为正则表达式?EL有类似于awk的波浪号〜运算符的东西吗?

regex jsp el

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

在IE中设置innerHTML时,<pre>标签会丢失换行符

我正在使用Prototype的PeriodicalUpdater来更新带有ajax调用结果的div.据我了解,div通过设置innerHTML来更新.

div包含在<pre>标签中.在Firefox中,<pre>格式化按预期工作,但在IE中,文本都以一行结尾.

这里有一些示例代码,用于说明问题.在Firefox中,abc是在不同的行上def; 在IE中,它在同一条线上.

    <html>
    <head>
      <title>IE preformatted text sucks</title>
    </head>
    <body>
      <pre id="test">
        a b c
        d e f
      </pre>
      <script type="text/javascript"><!--
      var textContent = document.getElementById("test").innerText;
      textContent = textContent.replace("a", "<span style=\"color:red;\">a</span>");
      document.getElementById("test").style.whiteSpace = "pre";
      document.getElementById("test").innerHTML = textContent;
      --></script>
    </body>
    </html>
Run Code Online (Sandbox Code Playgroud)

有人知道解决这个问题的方法吗?

html javascript css internet-explorer

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

使用request.getSession()作为锁定对象?

我有一些获取和设置会话属性的java代码:

Object obj = session.getAttribute(TEST_ATTR);
if (obj==null) {
  obj = new MyObject();
  session.setAttribute(obj);
}
Run Code Online (Sandbox Code Playgroud)

为了使这段代码成为线程安全的,我想将它包装在一个synchronized块中.但是我用什么作为锁定对象呢?使用会话是否有意义?

synchronized (session) {
  Object obj = session.getAttribute(TEST_ATTR);
  if (obj==null) {
    obj = new MyObject();
    session.setAttribute(obj);
  }
}
Run Code Online (Sandbox Code Playgroud)

java concurrency session locking thread-safety

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

如何比较Perl中的日期?

我有两个日期(使用str2time解析).如何判断一个人是否接着另一个?

perl date

10
推荐指数
1
解决办法
1951
查看次数