SQLite портирован на .NET

    Размер бинарника 528KB против 506KB оригинального. Неплохо.

    Производительность пока не впечатляет:

    Test C#-SQLite SQLite
    Insert 300K 1300K
    Select 1500K 8450K
    Update 60K 300K
    Delete 250K 700K

    Остается надеяться на то, что отказ от P/Invoke и последующие оптимизации сделают своё дело.
    Следим за проектом и изучаем его на Google Code
    code.google.com/p/csharp-sqlite

    Средняя зарплата в IT

    111 111 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 6 720 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 67

      0
      А что за единица измерения производительности К? (200К)
        –1
        тысяч строк
          0
          и? тысяч строк которые принимает в максимуме запрос? тысячи строк код которых реализовал функциональность?
            –4
            Тысяч строк.
          +11
          Это, конечно же, градусы Кельвина: температура сферического процессора в вакууме при выполнении указанных операций над таблицами БД.
            0
            Сферический процессор будет плохо тепло отдавать.
            А в вакууме его еще и некуда отдавать.
              0
              РЕЗУЛЬТАТЫ СФАЛЬСИФИЦИРОВАНЫ! Наебалово, расходимся :-)
                0
                В вакууме тепло передается излучением. Или лампочки накаливания не существует?!
                  0
                  Death Star опасносте.
              +2
              Ну и зачем?
                +1
                Для RIA. В основном лоя Silverlight.
                +1
                Как-то все так сумбурно.
                  +1
                  Было бы интересно ещё увидеть колонку SQL Server CE
                    +2
                    Хехе, месье знает толк в извращениях :)
                      0
                      Скорее наоборот — для .NET это обкатанное надёжное решение, которое ещё и обновляется отдельно. Ну и принципиально CE ближе к взрослому серверу, чем SQL Lite.
                        0
                        Вы имеете в виду что SQLite «в коробке» это однопользовательская БД и этим все сказано? Правильно ли я понял чем «взрослый» сервер отличается молодого? А нужно ли оно на мобильном девайсе?
                          0
                          Я имею в виду, что SQLite скорее примитивный интерпретатор, а CE более осмысленно подходит к обработке запросов.
                    +2
                    Код SQLite один из самых вылизанных. Смысла в портировании не вижу вообще. То есть один смысл есть — работа в условиях, где нельзя использовать неуправлемый код, например ASP.Net хостинг. с другой сторны, на хостинге будет MS SQL Server. Так что практического смысла в портированиинет. Впрочем, сам авторор пишет

                    Q: Since SQLite has a windows dll and an executable you can download why port to C#?

                    A: It was an exercise to learn the C# language
                      +2
                      этот порт нужен в первую очередь для внедрения в silverlight-приложения для организации внутренней базы данных с доступом чрез sql-запросы. это очень важно и нужно для silverlight-разработчиков.
                        0
                        Если это Silverlight в браузере, то почему нужна локальная база? Silverlight сам по себе (stand alone) лично мне не понятен.
                          0
                          А теперь Silverlight умеет работать вне браузера, ага.
                          0
                          Ну хер знает.
                          А там нельзя просто вызывать unmanaged dll?
                          0
                          А разве на ASP.NET нельзя использовать неуправляемый код? о_О
                          Или это уже на шаред-хостингах его запрещают?
                            0
                            Запрещают на shared-хостингах.
                              0
                              А можно узнать причину?
                              Разве скрипт пользователя хостинга X не будет работать от пользователя системы X?
                              На никсовых то разрешены ssh, system-функции(кроме «совсем уж шаред») и т.д.
                            0
                            смысл в том чтобы не парится по поводу архитектуры под которой будет запущено это дело.
                            а думать, что же положить в дистрибутив, x86 или x64 версию — не каждому хочется.
                            0
                            а в каких там случая pinvoke юзается?
                              +2
                              А практически во всех.
                                0
                                А как отказ от PInvoke убыстрит код?
                                Думаете, что родное C# API быстрее, чем вызов WinAPI через PInvoke?
                                Мне кажется, что должно быть плюс-минус полпроцента.
                                Или я чего-то не понимаю?
                                  0
                                  Сам механизм P/Invoke не очень шустрый, ибо состоит из преобразования managed переменных в unmanaged параметры, обратной операции и всякой побочной возни.
                                    0
                                    А в родном API нет этой возни?
                                      0
                                      В родном, это в том, который внутренний в .NET и вызывает нативные методы? Там количество этой возни сильно уменьшено за счёт хитрых структур, специальных оптимизаций, небезопасных методов. Поскольку это встроено в ядро .NET, они это могут позволить.
                                        0
                                        Понятно, спасибо.
                                        Хотя (залез в багтракалку) если отказываешься от P/Invoke для вызова FormatMessageA, то это выигрыш. А если для вызова LockFileEx, то, имхо, никакого.
                                    0
                                    Это особенности работы p/invoke.
                                    Тормоза при переключении между managed и unmanaged кодом (маршализация и пр.) может сожрать всё преимущество в скорости C кода.
                                      0
                                      Я вот к чему. Маршализация нужна, хоть она находится в P/Invoke, хоть в родных библиотеках.
                                      Или именно сам P/Invoke тормозной?
                                        0
                                        Вообще основные тормоза будут при маршализации, я считаю. Функции без параметров будут быстрее запускаться, чем функции с параметром.
                                          0
                                          Ага, привожу пример:

                                            0
                                            Ага, привожу пример

                                            [DllImport( «kernel32», SetLastError = true )]
                                            static extern int LockFile(int hFile, int dwFileOffsetLow, int
                                            dwFileOffsetHigh, int nNumberOfBytesToLockLow, int nNumberOfBytesToLockHigh);

                                            Вот чего-то мне кажется что маршализация ничего не стоит.
                                              0
                                              Это пример чего, извини:)
                                              Вот тебе для размышлений другой:
                                              stackoverflow.com/questions/459107/net-marshalling-speed
                                                0
                                                Пример конкретной штуки которая конкретно в этом приложении C#-Sqlite сделана на P/Invoke. Мне кажется, что маршализация тут не стоит ничего.

                                                С ссылочки цитирую из комментариев «Unfortunately, that extreme precision means a cost of roughly 2.5 seconds per run. Removing the timing code removed that time constraint.»
                                                  0
                                                  Возможно, ты имеешь ввиду отсутствие в той функции ссылочнных типов данных?
                                  +1
                                  очень ждем
                                  автор, кстати, говорил, что производительностью вообще не занимался, его интересовал только сам построчный порт с языка Си.

                                  кстати, стоит тут дополнить про название, так как SQLite — это торговая марка, то с названием были по началу проблемы, но потом автор SQLite согласился на название C#-SQLite
                                    0
                                    Да, в гугл коде выложена переписка. Интересно почитать)
                                    +1
                                    А не проще ли было бы портировать HSQLDB или Apache Derby с Java?
                                      0
                                      А проще вообще ничего не портировать.
                                      Видимо автор так решил.
                                      –2
                                      Размер бинарника 528KB против 506KB оригинального. Неплохо.

                                      22Кб это да, реальное достижение :D
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                          +4
                                          Если учесть, что интерпритатор — ещё несколько десятков метров беиблиотек и всякого кода — то 506 КБ — бесконечно много.
                                          • НЛО прилетело и опубликовало эту надпись здесь
                                          +2
                                          Вот уж я бы не сравнивал размеры бинарников, ибо к 528KB надо ещё прибавить 20 метров самого .NET, без которых он не запустится…
                                          • НЛО прилетело и опубликовало эту надпись здесь
                                              +2
                                              Это всё понятно. Но, тем не менее, сравнивать файл .NEТ и нативный и говорить, — «ух, ты! какой маленький!» крайне не корректно. Иначе в пределе получаем некий абстрактный язык программирования в котором sqlite занимает один байт, при размере среды выполнения — сто мегабайт. Можно даже до одного бита ужать: 1 — есть sqlite, 0 — нет sqlite :)
                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                  0
                                                  :) Ну, если конечно так :)
                                              +2
                                              Тогда и к оригинальному бинарнику стоит прибавить ещё десяток метров libc :)
                                                0
                                                Что будем прибавлять к Windows-версии sqlite.dll? Размер 243 Кб. Из зависимостей — только msvcrt.dll (335 КБ). Итого ~600 Кб.
                                                  0
                                                  Будем прибавлять kernel32.dll :)
                                                  Фреймворк он есть, он дан нам свыше и включать его в размер программы неправильно.
                                                    0
                                                    угу, тогда я сейчас начну страшным голосом кричать какие мальенкие программы получаются на MSVC++ 150 К на программу с гуями! Ну, и ещё пять метров билиотек…
                                                      0
                                                      Библиотеки эти MSVC++ ставятся Windows Update для всех? Или их все-таки надо с собой таскать?
                                                        0
                                                        В том-то и приккол — что надо с собой таскать. Т.к. они могут быть в системе. Могут не быть. Могут быть, но другой версии. В результате установленнео приложение занимает не много места, но вот инсталлятор должен содеражть все необходимые библотеки — иначе запросто может оказаться (и часто оказывается), что у пользователя чего-то не хвататет в системе.
                                                          0
                                                          Бинго!
                                                          А .Net Framework с собой таскать не надо. Потому что он ± стандартный.
                                                            –1
                                                            На какой, извеняюсь, системе? на WinXP? С фигли? не слышал я что-то, чтобы .Net 1,2,3 включали в Windows update.
                                                              0
                                                              Windows update его предлагает ваще-то :)
                                                                0
                                                                Умеющий слушать, да услышит. Конечно, включали)
                                                  0
                                                  Сравнивать некорректно, это да. Но совершенно по другой причине, не из-за рамера платформы .NET (может для полного счастья еще и размер винды прибавим тогда?).
                                                  Некорректно сравнивать потому, что CLR-код, и x86/x64-код — это абсолютно разные величины. И сравнение 528KB и 506KB — это вовсе не показатель. И, кстати, зачастую x86-приложения, портированные на .NET, получаются меньше.
                                                0
                                                Есть провайдер System.Data.SQLite от http://sqlite.phxsoftware.com/
                                                В чем принципиальные различия?
                                                • НЛО прилетело и опубликовало эту надпись здесь

                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                Самое читаемое